Postgres Migration
Migration documentation and scripts
This commit is contained in:
parent
54a1a407d0
commit
7130a1fd43
192
.claude/plans/season_batting_stats_trigger_migration.md
Normal file
192
.claude/plans/season_batting_stats_trigger_migration.md
Normal file
@ -0,0 +1,192 @@
|
||||
# Season Batting Stats Trigger Migration Plan
|
||||
|
||||
## Overview
|
||||
Convert the existing `season_batting_stats_view` materialized view to a trigger-based table for incremental updates when games are completed.
|
||||
|
||||
## Current State
|
||||
- Materialized view defined in `season_batting_stats_view.sql`
|
||||
- Requires full refresh for all data updates
|
||||
- Used by `/api/v3/views/season-batting` endpoint in `app/routers_v3/views.py`
|
||||
|
||||
## Target State
|
||||
- Regular table with same structure and data
|
||||
- Trigger automatically updates only affected players when games complete
|
||||
- Same query performance, much faster updates (~30 players vs entire dataset)
|
||||
|
||||
## Pre-Migration Checklist
|
||||
|
||||
### 1. Backup Current Data
|
||||
```sql
|
||||
-- Export current materialized view data
|
||||
CREATE TABLE season_batting_stats_backup AS
|
||||
SELECT * FROM season_batting_stats_view;
|
||||
```
|
||||
|
||||
### 2. Verify Dependencies
|
||||
- [x] Confirm `app/routers_v3/views.py` uses `SeasonBattingStatsView` model
|
||||
- [x] Check if any other code references the materialized view
|
||||
- [ ] Verify `stratgame` table has `is_complete` column or similar completion flag
|
||||
|
||||
### 3. Environment Setup
|
||||
- [ ] Test database connection in Adminer
|
||||
- [ ] Verify PostgreSQL version supports required trigger syntax
|
||||
- [ ] Ensure adequate storage space for table conversion
|
||||
|
||||
## Migration Steps
|
||||
|
||||
### Step 1: Database Schema Migration
|
||||
**Location:** Run in Adminer with "Stop on error" ✅ checked
|
||||
|
||||
```sql
|
||||
-- Execute the full conversion SQL from season_batting_stats_view.sql
|
||||
-- This includes:
|
||||
-- 1. DROP MATERIALIZED VIEW season_batting_stats_view CASCADE
|
||||
-- 2. CREATE TABLE season_batting_stats_view AS (original query)
|
||||
-- 3. ADD PRIMARY KEY CONSTRAINT (player_id, season)
|
||||
-- 4. CREATE indexes for performance
|
||||
-- 5. CREATE trigger function update_season_batting_stats_for_game()
|
||||
-- 6. CREATE trigger on stratgame completion
|
||||
```
|
||||
|
||||
### Step 2: Verify Migration Success
|
||||
```sql
|
||||
-- Check table structure matches original
|
||||
\d season_batting_stats_view
|
||||
|
||||
-- Verify data integrity
|
||||
SELECT COUNT(*) FROM season_batting_stats_view;
|
||||
SELECT COUNT(*) FROM season_batting_stats_backup;
|
||||
|
||||
-- Test sample queries
|
||||
SELECT * FROM season_batting_stats_view WHERE season = 12 LIMIT 5;
|
||||
```
|
||||
|
||||
### Step 3: Test Trigger Functionality
|
||||
```sql
|
||||
-- Test trigger by marking a game complete (if safe to do so)
|
||||
-- OR create a test scenario with sample data
|
||||
```
|
||||
|
||||
### Step 4: Application Testing
|
||||
- [ ] Restart FastAPI application
|
||||
- [ ] Test `/api/v3/views/season-batting?season=12` endpoint
|
||||
- [ ] Verify query performance is maintained
|
||||
- [ ] Confirm data consistency with previous results
|
||||
|
||||
## Game Completion Integration
|
||||
|
||||
### Required: Game Completion Flag
|
||||
The trigger depends on a game completion mechanism. Verify one of these exists:
|
||||
|
||||
**Option A: Existing column**
|
||||
```sql
|
||||
-- Check if stratgame has completion tracking
|
||||
SELECT column_name, data_type
|
||||
FROM information_schema.columns
|
||||
WHERE table_name = 'stratgame'
|
||||
AND column_name IN ('is_complete', 'completed', 'status', 'final');
|
||||
```
|
||||
|
||||
**Option B: Alternative completion logic**
|
||||
If no completion flag exists, the trigger can be modified to fire on:
|
||||
- Game result updates
|
||||
- Final play insertion
|
||||
- Manual API call
|
||||
|
||||
### Integration Points
|
||||
- `app/routers_v3/games.py` - Game completion endpoints
|
||||
- `app/routers_v3/stratplay.py` - Play insertion logic
|
||||
- Discord bot game processing workflows
|
||||
|
||||
## Rollback Plan
|
||||
|
||||
### If Migration Fails
|
||||
```sql
|
||||
-- Restore original materialized view
|
||||
CREATE MATERIALIZED VIEW season_batting_stats_view AS
|
||||
-- (original query from season_batting_stats_view.sql)
|
||||
|
||||
-- Restore original indexes
|
||||
CREATE INDEX idx_season_batting_stats_season ON season_batting_stats_view (season);
|
||||
CREATE INDEX idx_season_batting_stats_team ON season_batting_stats_view (season, player_team_id);
|
||||
CREATE INDEX idx_season_batting_stats_player ON season_batting_stats_view (player_id);
|
||||
|
||||
-- Clean up failed table if needed
|
||||
DROP TABLE IF EXISTS season_batting_stats_view;
|
||||
```
|
||||
|
||||
### If Performance Issues Arise
|
||||
- Monitor query execution plans
|
||||
- Add additional indexes if needed
|
||||
- Consider reverting to materialized view if trigger overhead is too high
|
||||
|
||||
## Success Criteria
|
||||
|
||||
### Functional Requirements
|
||||
- [x] All existing queries return same results
|
||||
- [ ] Trigger updates only affected players when games complete
|
||||
- [ ] Query performance matches or exceeds materialized view
|
||||
- [ ] FastAPI endpoints work without modification
|
||||
|
||||
### Performance Targets
|
||||
- **Query time**: ≤ current materialized view performance
|
||||
- **Update time**: < 5 seconds for typical game (30 players)
|
||||
- **Storage overhead**: Minimal (same data structure)
|
||||
|
||||
### Monitoring
|
||||
- Log trigger execution times
|
||||
- Monitor database performance during game completions
|
||||
- Track any query plan changes
|
||||
|
||||
## Post-Migration Tasks
|
||||
|
||||
### 1. Cleanup
|
||||
```sql
|
||||
-- Remove backup table after successful migration (1+ weeks)
|
||||
DROP TABLE season_batting_stats_backup;
|
||||
```
|
||||
|
||||
### 2. Documentation Updates
|
||||
- Update `database/CLAUDE.md` to document new trigger system
|
||||
- Document game completion integration requirements
|
||||
- Update API documentation if needed
|
||||
|
||||
### 3. Consider Similar Views
|
||||
Evaluate other materialized views for similar conversion:
|
||||
- Season pitching stats
|
||||
- Season fielding stats
|
||||
- Career statistics views
|
||||
|
||||
## Risk Assessment
|
||||
|
||||
### High Risk
|
||||
- **Data loss**: Mitigated by backup table creation
|
||||
- **Query performance degradation**: Mitigated by same index structure
|
||||
- **Trigger bugs**: Mitigated by comprehensive testing
|
||||
|
||||
### Medium Risk
|
||||
- **Application downtime**: Plan migration during low-usage period
|
||||
- **Complex rollback**: Keep original SQL and backup data
|
||||
|
||||
### Low Risk
|
||||
- **Storage increase**: Minimal, same data structure
|
||||
- **Maintenance overhead**: Triggers are largely self-managing
|
||||
|
||||
## Timeline
|
||||
|
||||
### Preparation Phase (1-2 days)
|
||||
- [ ] Complete pre-migration checklist
|
||||
- [ ] Set up backup procedures
|
||||
- [ ] Identify game completion mechanism
|
||||
|
||||
### Migration Phase (2-4 hours)
|
||||
- [ ] Execute database migration
|
||||
- [ ] Verify data integrity
|
||||
- [ ] Test application functionality
|
||||
|
||||
### Validation Phase (1 week)
|
||||
- [ ] Monitor trigger performance
|
||||
- [ ] Validate game completion updates
|
||||
- [ ] Clean up backup data
|
||||
|
||||
**Total Estimated Time**: 3-4 days including testing and monitoring
|
||||
@ -0,0 +1,49 @@
|
||||
|
||||
# CSV REVIEW INSTRUCTIONS
|
||||
|
||||
## File 1: unmatched_players_for_review_updated.csv
|
||||
|
||||
**Resolution Column Values:**
|
||||
- `ACCEPT` - Use the suggested_sbaplayer_id (pre-filled for exact matches)
|
||||
- `USE_SBA_123` - Use specific SbaPlayer ID 123 instead of suggestion
|
||||
- `CREATE_NEW` - Create new SbaPlayer record for this player
|
||||
- `SKIP` - Skip this player for now (won't be processed)
|
||||
- `REVIEW` - Needs manual review (pre-filled for partial matches)
|
||||
|
||||
**Pre-filled Values:**
|
||||
- Exact name matches are pre-filled as `ACCEPT`
|
||||
- Partial matches are marked as `REVIEW`
|
||||
- No suggestions are marked as `CREATE_NEW`
|
||||
|
||||
## File 2: high_risk_player_matches_updated.csv
|
||||
|
||||
**Resolution Column Values:**
|
||||
- `MERGE_123_INTO_456` - Merge SbaPlayer 123 into SbaPlayer 456
|
||||
- `DIFFERENT_PEOPLE` - These are actually different people, keep separate
|
||||
- `USE_SBA_123` - For player matches, use this specific SbaPlayer ID
|
||||
- `CREATE_NEW` - Create new SbaPlayer record
|
||||
- `SKIP` - Skip this for now
|
||||
|
||||
**Pre-filled Logic for SbaPlayer Conflicts:**
|
||||
- Different bbref_ids = `DIFFERENT_PEOPLE` (bbref_ids are globally unique)
|
||||
- Same bbref_id = `MERGE` (definitely duplicates)
|
||||
- One has bbref_id, one doesn't = `MERGE` suggestion (review needed)
|
||||
- Neither has bbref_id + identical names = `MERGE` suggestion
|
||||
- Player ambiguous matches pre-select the first suggested SbaPlayer
|
||||
- Middle initial conflicts are marked as `DIFFERENT_PEOPLE`
|
||||
|
||||
## Important Notes:
|
||||
- **bbref_ids are globally unique** - trust them completely
|
||||
- If two SbaPlayers have different bbref_ids, they are different people
|
||||
- If one has bbref_id and one doesn't, they might be the same person
|
||||
|
||||
## Next Steps:
|
||||
1. Review and edit the resolution columns in both files
|
||||
2. Save the files when done
|
||||
3. Let Claude know you're ready to process the changes
|
||||
|
||||
## Common Patterns:
|
||||
- bbref_id mismatches (like "HALP") should usually be `CREATE_NEW`
|
||||
- Different bbref_ids = always different people
|
||||
- Common names like "Carlos Martinez" need careful review
|
||||
- Middle initials usually indicate different people
|
||||
@ -0,0 +1,252 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Script to analyze player data for sbaplayer matching strategy
|
||||
Uses hierarchical matching: bbref_id (Player) -> key_bbref (SbaPlayer) -> name fallback
|
||||
"""
|
||||
import requests
|
||||
import json
|
||||
import logging
|
||||
import os
|
||||
from dataclasses import dataclass, asdict
|
||||
from typing import Dict, List, Set, Optional
|
||||
from collections import defaultdict
|
||||
|
||||
# Set up logging
|
||||
logging.basicConfig(
|
||||
level=logging.INFO,
|
||||
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
|
||||
handlers=[
|
||||
logging.FileHandler('/tmp/player_analysis.log'),
|
||||
logging.StreamHandler()
|
||||
]
|
||||
)
|
||||
logger = logging.getLogger('PlayerAnalysis')
|
||||
|
||||
@dataclass
|
||||
class PlayerRecord:
|
||||
id: int
|
||||
name: str
|
||||
season: int
|
||||
bbref_id: Optional[str] = None
|
||||
sbaplayer_id: Optional[int] = None
|
||||
|
||||
@dataclass
|
||||
class SbaPlayerRecord:
|
||||
id: int
|
||||
first_name: str
|
||||
last_name: str
|
||||
key_bbref: Optional[str] = None
|
||||
key_fangraphs: Optional[int] = None
|
||||
key_mlbam: Optional[int] = None
|
||||
key_retro: Optional[str] = None
|
||||
|
||||
def fetch_players_for_season(season: int, use_cache: bool = True) -> List[PlayerRecord]:
|
||||
"""Fetch all players for a given season, with caching"""
|
||||
cache_file = f"/tmp/players_season_{season}.json"
|
||||
|
||||
# Try to load from cache first
|
||||
if use_cache and os.path.exists(cache_file):
|
||||
try:
|
||||
with open(cache_file, 'r') as f:
|
||||
cached_data = json.load(f)
|
||||
|
||||
players = []
|
||||
for player_data in cached_data:
|
||||
player = PlayerRecord(**player_data)
|
||||
players.append(player)
|
||||
|
||||
logger.info(f"Season {season}: {len(players)} players loaded from cache")
|
||||
return players
|
||||
except Exception as e:
|
||||
logger.warning(f"Failed to load cache for season {season}: {e}")
|
||||
|
||||
# Fetch from API
|
||||
try:
|
||||
url = f"https://api.sba.manticorum.com/players?season={season}"
|
||||
response = requests.get(url, timeout=30)
|
||||
response.raise_for_status()
|
||||
data = response.json()
|
||||
|
||||
players = []
|
||||
for player_data in data.get('players', []):
|
||||
player = PlayerRecord(
|
||||
id=player_data['id'],
|
||||
name=player_data['name'],
|
||||
season=season,
|
||||
bbref_id=player_data.get('bbref_id') if player_data.get('bbref_id') else None,
|
||||
sbaplayer_id=player_data.get('sbaplayer_id')
|
||||
)
|
||||
players.append(player)
|
||||
|
||||
# Save to cache
|
||||
try:
|
||||
with open(cache_file, 'w') as f:
|
||||
json.dump([asdict(p) for p in players], f, indent=2)
|
||||
logger.info(f"Season {season}: {len(players)} players fetched and cached")
|
||||
except Exception as e:
|
||||
logger.warning(f"Failed to cache season {season} data: {e}")
|
||||
|
||||
return players
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Error fetching season {season}: {e}")
|
||||
return []
|
||||
|
||||
def fetch_sbaplayers(use_cache: bool = True) -> List[SbaPlayerRecord]:
|
||||
"""Fetch all SBA players, with caching"""
|
||||
cache_file = "/tmp/sbaplayers.json"
|
||||
|
||||
# Try to load from cache first
|
||||
if use_cache and os.path.exists(cache_file):
|
||||
try:
|
||||
with open(cache_file, 'r') as f:
|
||||
cached_data = json.load(f)
|
||||
|
||||
sbaplayers = []
|
||||
for sba_data in cached_data:
|
||||
sbaplayer = SbaPlayerRecord(**sba_data)
|
||||
sbaplayers.append(sbaplayer)
|
||||
|
||||
logger.info(f"SbaPlayers: {len(sbaplayers)} records loaded from cache")
|
||||
return sbaplayers
|
||||
except Exception as e:
|
||||
logger.warning(f"Failed to load sbaplayers cache: {e}")
|
||||
|
||||
# Fetch from API
|
||||
try:
|
||||
url = "https://api.sba.manticorum.com/sbaplayers"
|
||||
response = requests.get(url, timeout=30)
|
||||
response.raise_for_status()
|
||||
data = response.json()
|
||||
|
||||
sbaplayers = []
|
||||
for sba_data in data.get('players', []):
|
||||
sbaplayer = SbaPlayerRecord(
|
||||
id=sba_data['id'],
|
||||
first_name=sba_data['first_name'],
|
||||
last_name=sba_data['last_name'],
|
||||
key_bbref=sba_data.get('key_bbref') if sba_data.get('key_bbref') else None,
|
||||
key_fangraphs=sba_data.get('key_fangraphs'),
|
||||
key_mlbam=sba_data.get('key_mlbam'),
|
||||
key_retro=sba_data.get('key_retro') if sba_data.get('key_retro') else None
|
||||
)
|
||||
sbaplayers.append(sbaplayer)
|
||||
|
||||
# Save to cache
|
||||
try:
|
||||
with open(cache_file, 'w') as f:
|
||||
json.dump([asdict(s) for s in sbaplayers], f, indent=2)
|
||||
logger.info(f"SbaPlayers: {len(sbaplayers)} records fetched and cached")
|
||||
except Exception as e:
|
||||
logger.warning(f"Failed to cache sbaplayers data: {e}")
|
||||
|
||||
return sbaplayers
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Error fetching sbaplayers: {e}")
|
||||
return []
|
||||
|
||||
def analyze_matching_potential():
|
||||
"""Analyze potential matches between players and sbaplayers"""
|
||||
|
||||
# Fetch all data
|
||||
logger.info("Fetching SbaPlayer records...")
|
||||
sbaplayers = fetch_sbaplayers()
|
||||
|
||||
logger.info("Fetching Player records from all seasons...")
|
||||
all_players: List[PlayerRecord] = []
|
||||
for season in range(1, 13):
|
||||
players = fetch_players_for_season(season)
|
||||
all_players.extend(players)
|
||||
|
||||
logger.info(f"Total player-season records: {len(all_players)}")
|
||||
|
||||
# Create lookup maps
|
||||
sbaplayer_by_bbref = {}
|
||||
sbaplayer_by_name = {}
|
||||
|
||||
for sba in sbaplayers:
|
||||
if sba.key_bbref:
|
||||
sbaplayer_by_bbref[sba.key_bbref] = sba
|
||||
full_name = f"{sba.first_name} {sba.last_name}"
|
||||
sbaplayer_by_name[full_name] = sba
|
||||
|
||||
logger.info(f"SbaPlayers with key_bbref: {len(sbaplayer_by_bbref)}")
|
||||
logger.info(f"Total unique SbaPlayers: {len(sbaplayers)}")
|
||||
|
||||
# Analysis of Player records
|
||||
players_with_bbref = [p for p in all_players if p.bbref_id]
|
||||
players_without_bbref = [p for p in all_players if not p.bbref_id]
|
||||
|
||||
logger.info(f"Player records with bbref_id: {len(players_with_bbref)} ({len(players_with_bbref)/len(all_players)*100:.1f}%)")
|
||||
logger.info(f"Player records without bbref_id: {len(players_without_bbref)} ({len(players_without_bbref)/len(all_players)*100:.1f}%)")
|
||||
|
||||
# Try matching by bbref_id
|
||||
bbref_matches = 0
|
||||
bbref_no_matches = 0
|
||||
|
||||
for player in players_with_bbref:
|
||||
if player.bbref_id in sbaplayer_by_bbref:
|
||||
bbref_matches += 1
|
||||
else:
|
||||
bbref_no_matches += 1
|
||||
|
||||
logger.info(f"Player records that can match by bbref_id: {bbref_matches}")
|
||||
logger.info(f"Player records with bbref_id but no SbaPlayer match: {bbref_no_matches}")
|
||||
|
||||
# Group remaining players by unique identifiers
|
||||
unique_bbref_players = defaultdict(list) # players grouped by bbref_id
|
||||
unique_name_players = defaultdict(list) # players without bbref_id, grouped by name
|
||||
|
||||
for player in all_players:
|
||||
if player.bbref_id:
|
||||
unique_bbref_players[player.bbref_id].append(player)
|
||||
else:
|
||||
unique_name_players[player.name].append(player)
|
||||
|
||||
logger.info(f"Unique players identifiable by bbref_id: {len(unique_bbref_players)}")
|
||||
logger.info(f"Unique players identifiable by name only: {len(unique_name_players)}")
|
||||
|
||||
# Show some examples
|
||||
logger.info("\nExample bbref_id matches:")
|
||||
count = 0
|
||||
for bbref_id, players in unique_bbref_players.items():
|
||||
if bbref_id in sbaplayer_by_bbref and count < 5:
|
||||
seasons = sorted([p.season for p in players])
|
||||
sba = sbaplayer_by_bbref[bbref_id]
|
||||
logger.info(f" {bbref_id}: {players[0].name} -> {sba.first_name} {sba.last_name} (seasons {seasons})")
|
||||
count += 1
|
||||
|
||||
logger.info("\nExample name-only players (need new SbaPlayer records):")
|
||||
count = 0
|
||||
for name, players in unique_name_players.items():
|
||||
if count < 5:
|
||||
seasons = sorted([p.season for p in players])
|
||||
logger.info(f" {name} (seasons {seasons})")
|
||||
count += 1
|
||||
|
||||
# Summary statistics
|
||||
total_unique_players = len(unique_bbref_players) + len(unique_name_players)
|
||||
matchable_by_bbref = sum(1 for bbref in unique_bbref_players.keys() if bbref in sbaplayer_by_bbref)
|
||||
need_new_sbaplayers = len(unique_bbref_players) - matchable_by_bbref + len(unique_name_players)
|
||||
|
||||
logger.info(f"\n=== SUMMARY ===")
|
||||
logger.info(f"Total unique players across all seasons: {total_unique_players}")
|
||||
logger.info(f"Can match to existing SbaPlayers by bbref_id: {matchable_by_bbref}")
|
||||
logger.info(f"Need new SbaPlayer records: {need_new_sbaplayers}")
|
||||
logger.info(f"Total player-season records to update: {len(all_players)}")
|
||||
|
||||
return {
|
||||
'total_player_records': len(all_players),
|
||||
'total_unique_players': total_unique_players,
|
||||
'matchable_by_bbref': matchable_by_bbref,
|
||||
'need_new_sbaplayers': need_new_sbaplayers,
|
||||
'unique_bbref_players': dict(unique_bbref_players),
|
||||
'unique_name_players': dict(unique_name_players),
|
||||
'sbaplayer_lookup': sbaplayer_by_bbref
|
||||
}
|
||||
|
||||
if __name__ == "__main__":
|
||||
logger.info("Starting player matching analysis...")
|
||||
results = analyze_matching_potential()
|
||||
logger.info("Analysis complete!")
|
||||
@ -0,0 +1,14 @@
|
||||
COMPLETE PLAYER ASSIGNMENT SUMMARY
|
||||
==================================================
|
||||
|
||||
ASSIGNMENT BREAKDOWN:
|
||||
manual_decision: 120 players
|
||||
automatic_bbref_match: 6,764 players
|
||||
new_sbaplayer: 5,348 players
|
||||
|
||||
TOTAL ASSIGNMENTS: 12,232
|
||||
NEW SBAPLAYERS TO CREATE: 1,323
|
||||
|
||||
FILES GENERATED:
|
||||
1. new_sbaplayers_to_insert_complete.csv - New SbaPlayer records
|
||||
2. player_sbaplayer_assignments_complete.csv - ALL player assignments
|
||||
@ -0,0 +1,440 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Find high-risk player name matches that could lead to incorrect linking
|
||||
Identifies cases like "Mike Trout" vs "Michael Trout" or "Luis V Garcia" vs "Luis H Garcia"
|
||||
"""
|
||||
import json
|
||||
import csv
|
||||
import logging
|
||||
from dataclasses import dataclass
|
||||
from typing import Dict, List, Set, Optional, Tuple
|
||||
from collections import defaultdict
|
||||
import difflib
|
||||
|
||||
# Set up logging
|
||||
logging.basicConfig(
|
||||
level=logging.INFO,
|
||||
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
|
||||
handlers=[
|
||||
logging.FileHandler('/tmp/high_risk_matches.log'),
|
||||
logging.StreamHandler()
|
||||
]
|
||||
)
|
||||
logger = logging.getLogger('HighRiskMatches')
|
||||
|
||||
@dataclass
|
||||
class PlayerRecord:
|
||||
id: int
|
||||
name: str
|
||||
season: int
|
||||
bbref_id: Optional[str] = None
|
||||
sbaplayer_id: Optional[int] = None
|
||||
|
||||
@dataclass
|
||||
class SbaPlayerRecord:
|
||||
id: int
|
||||
first_name: str
|
||||
last_name: str
|
||||
key_bbref: Optional[str] = None
|
||||
key_fangraphs: Optional[int] = None
|
||||
key_mlbam: Optional[int] = None
|
||||
key_retro: Optional[str] = None
|
||||
|
||||
def normalize_name(name: str) -> str:
|
||||
"""Normalize a name for comparison (remove punctuation, lowercase, etc.)"""
|
||||
import re
|
||||
# Remove periods, apostrophes, hyphens
|
||||
normalized = re.sub(r"['\.\-]", "", name.lower())
|
||||
# Replace multiple spaces with single space
|
||||
normalized = re.sub(r'\s+', ' ', normalized)
|
||||
# Strip whitespace
|
||||
normalized = normalized.strip()
|
||||
return normalized
|
||||
|
||||
def get_name_variants(name: str) -> Set[str]:
|
||||
"""Generate common variants of a name"""
|
||||
variants = set()
|
||||
normalized = normalize_name(name)
|
||||
variants.add(normalized)
|
||||
|
||||
# Split into parts
|
||||
parts = normalized.split()
|
||||
if len(parts) >= 2:
|
||||
first_part = parts[0]
|
||||
remaining = ' '.join(parts[1:])
|
||||
|
||||
# Common nickname patterns
|
||||
nickname_map = {
|
||||
'michael': ['mike', 'micky', 'mickey'],
|
||||
'mike': ['michael'],
|
||||
'william': ['will', 'bill', 'billy'],
|
||||
'will': ['william'],
|
||||
'bill': ['william'],
|
||||
'robert': ['rob', 'bob', 'bobby'],
|
||||
'rob': ['robert'],
|
||||
'bob': ['robert'],
|
||||
'james': ['jim', 'jimmy'],
|
||||
'jim': ['james'],
|
||||
'thomas': ['tom', 'tommy'],
|
||||
'tom': ['thomas'],
|
||||
'joseph': ['joe', 'joey'],
|
||||
'joe': ['joseph'],
|
||||
'christopher': ['chris'],
|
||||
'chris': ['christopher'],
|
||||
'anthony': ['tony'],
|
||||
'tony': ['anthony'],
|
||||
'andrew': ['andy', 'drew'],
|
||||
'andy': ['andrew'],
|
||||
'drew': ['andrew'],
|
||||
'jonathan': ['jon'],
|
||||
'jon': ['jonathan'],
|
||||
'matthew': ['matt'],
|
||||
'matt': ['matthew'],
|
||||
'nicholas': ['nick'],
|
||||
'nick': ['nicholas'],
|
||||
'alexander': ['alex'],
|
||||
'alex': ['alexander'],
|
||||
'benjamin': ['ben'],
|
||||
'ben': ['benjamin'],
|
||||
'samuel': ['sam'],
|
||||
'sam': ['samuel'],
|
||||
'daniel': ['dan', 'danny'],
|
||||
'dan': ['daniel'],
|
||||
'danny': ['daniel'],
|
||||
'david': ['dave'],
|
||||
'dave': ['david'],
|
||||
'edward': ['ed', 'eddie'],
|
||||
'ed': ['edward'],
|
||||
'eddie': ['edward']
|
||||
}
|
||||
|
||||
# Add nickname variants
|
||||
if first_part in nickname_map:
|
||||
for nickname in nickname_map[first_part]:
|
||||
variants.add(f"{nickname} {remaining}")
|
||||
|
||||
# Handle middle initial variations (e.g., "Luis V Garcia" vs "Luis H Garcia")
|
||||
if len(parts) == 3 and len(parts[1]) == 1:
|
||||
# Middle initial pattern
|
||||
first_name = parts[0]
|
||||
last_name = parts[2]
|
||||
# Add version without middle initial
|
||||
variants.add(f"{first_name} {last_name}")
|
||||
# Add pattern to catch other middle initials
|
||||
variants.add(f"{first_name} _ {last_name}")
|
||||
|
||||
return variants
|
||||
|
||||
def calculate_name_similarity(name1: str, name2: str) -> float:
|
||||
"""Calculate similarity between two names using difflib"""
|
||||
norm1 = normalize_name(name1)
|
||||
norm2 = normalize_name(name2)
|
||||
return difflib.SequenceMatcher(None, norm1, norm2).ratio()
|
||||
|
||||
def load_cached_data():
|
||||
"""Load all cached data"""
|
||||
|
||||
# Load SbaPlayers
|
||||
logger.info("Loading cached SbaPlayer data...")
|
||||
with open('/tmp/sbaplayers.json', 'r') as f:
|
||||
sbaplayer_data = json.load(f)
|
||||
|
||||
sbaplayers = []
|
||||
for data in sbaplayer_data:
|
||||
sbaplayers.append(SbaPlayerRecord(**data))
|
||||
|
||||
# Load all player seasons
|
||||
logger.info("Loading cached player data...")
|
||||
all_players = []
|
||||
|
||||
for season in range(1, 13):
|
||||
cache_file = f"/tmp/players_season_{season}.json"
|
||||
try:
|
||||
with open(cache_file, 'r') as f:
|
||||
season_data = json.load(f)
|
||||
|
||||
for data in season_data:
|
||||
all_players.append(PlayerRecord(**data))
|
||||
|
||||
except FileNotFoundError:
|
||||
logger.error(f"Cache file for season {season} not found.")
|
||||
return None, None
|
||||
|
||||
return all_players, sbaplayers
|
||||
|
||||
def find_high_risk_matches():
|
||||
"""Find potentially problematic name matches"""
|
||||
|
||||
all_players, sbaplayers = load_cached_data()
|
||||
if not all_players or not sbaplayers:
|
||||
logger.error("Failed to load cached data.")
|
||||
return
|
||||
|
||||
logger.info(f"Analyzing {len(all_players)} player records and {len(sbaplayers)} SbaPlayers")
|
||||
|
||||
# Create name maps
|
||||
sbaplayer_names = {} # normalized name -> SbaPlayerRecord
|
||||
player_names = defaultdict(list) # normalized name -> list of PlayerRecords
|
||||
|
||||
for sba in sbaplayers:
|
||||
full_name = f"{sba.first_name} {sba.last_name}"
|
||||
normalized = normalize_name(full_name)
|
||||
sbaplayer_names[normalized] = sba
|
||||
|
||||
# Group unique players by name (using most recent season as representative)
|
||||
unique_players = {}
|
||||
players_by_bbref = defaultdict(list)
|
||||
players_without_bbref = defaultdict(list)
|
||||
|
||||
for player in all_players:
|
||||
if player.bbref_id:
|
||||
players_by_bbref[player.bbref_id].append(player)
|
||||
else:
|
||||
players_without_bbref[player.name].append(player)
|
||||
|
||||
# Get representative players
|
||||
for bbref_id, players in players_by_bbref.items():
|
||||
representative = max(players, key=lambda p: p.season)
|
||||
unique_players[representative.name] = representative
|
||||
|
||||
for name, players in players_without_bbref.items():
|
||||
representative = max(players, key=lambda p: p.season)
|
||||
unique_players[name] = representative
|
||||
|
||||
logger.info(f"Found {len(unique_players)} unique players")
|
||||
|
||||
# Find high-risk matches
|
||||
high_risk_matches = []
|
||||
|
||||
# 1. Multiple SbaPlayers with very similar names
|
||||
sba_name_groups = defaultdict(list)
|
||||
for sba in sbaplayers:
|
||||
full_name = f"{sba.first_name} {sba.last_name}"
|
||||
# Group by last name + first initial for initial clustering
|
||||
key = f"{sba.last_name.lower()} {sba.first_name[0].lower()}"
|
||||
sba_name_groups[key].append((sba, full_name))
|
||||
|
||||
logger.info("Finding similar SbaPlayer names...")
|
||||
sba_conflicts = []
|
||||
for key, sba_list in sba_name_groups.items():
|
||||
if len(sba_list) > 1:
|
||||
# Check if any are very similar
|
||||
for i, (sba1, name1) in enumerate(sba_list):
|
||||
for j, (sba2, name2) in enumerate(sba_list[i+1:], i+1):
|
||||
similarity = calculate_name_similarity(name1, name2)
|
||||
if similarity > 0.8: # Very similar names
|
||||
sba_conflicts.append({
|
||||
'type': 'sbaplayer_conflict',
|
||||
'sba1_id': sba1.id,
|
||||
'sba1_name': name1,
|
||||
'sba1_bbref': sba1.key_bbref,
|
||||
'sba2_id': sba2.id,
|
||||
'sba2_name': name2,
|
||||
'sba2_bbref': sba2.key_bbref,
|
||||
'similarity': similarity,
|
||||
'risk_reason': f'Very similar SbaPlayer names (similarity: {similarity:.3f})'
|
||||
})
|
||||
|
||||
logger.info(f"Found {len(sba_conflicts)} SbaPlayer name conflicts")
|
||||
|
||||
# 2. Players that could match multiple SbaPlayers
|
||||
logger.info("Finding players with ambiguous SbaPlayer matches...")
|
||||
player_conflicts = []
|
||||
|
||||
for player_name, player in unique_players.items():
|
||||
# Skip players with bbref_id (they have definitive matching)
|
||||
if player.bbref_id:
|
||||
continue
|
||||
|
||||
normalized_player = normalize_name(player_name)
|
||||
potential_matches = []
|
||||
|
||||
# Find all potential SbaPlayer matches
|
||||
for sba in sbaplayers:
|
||||
sba_name = f"{sba.first_name} {sba.last_name}"
|
||||
similarity = calculate_name_similarity(player_name, sba_name)
|
||||
|
||||
if similarity > 0.7: # Potential match threshold
|
||||
potential_matches.append((sba, sba_name, similarity))
|
||||
|
||||
# If multiple potential matches, this is high risk
|
||||
if len(potential_matches) > 1:
|
||||
# Sort by similarity
|
||||
potential_matches.sort(key=lambda x: x[2], reverse=True)
|
||||
|
||||
player_conflicts.append({
|
||||
'type': 'player_ambiguous_match',
|
||||
'player_id': player.id,
|
||||
'player_name': player_name,
|
||||
'player_seasons': [player.season], # We only have representative
|
||||
'potential_matches': [
|
||||
{
|
||||
'sba_id': sba.id,
|
||||
'sba_name': sba_name,
|
||||
'sba_bbref': sba.key_bbref,
|
||||
'similarity': sim
|
||||
}
|
||||
for sba, sba_name, sim in potential_matches[:5] # Top 5 matches
|
||||
],
|
||||
'risk_reason': f'Player could match {len(potential_matches)} different SbaPlayers'
|
||||
})
|
||||
|
||||
logger.info(f"Found {len(player_conflicts)} players with ambiguous matches")
|
||||
|
||||
# 3. Middle initial conflicts (Luis V Garcia vs Luis H Garcia type issues)
|
||||
logger.info("Finding middle initial conflicts...")
|
||||
middle_initial_conflicts = []
|
||||
|
||||
# Group players by "FirstName LastName" pattern (ignoring middle initial)
|
||||
name_groups = defaultdict(list)
|
||||
for player_name, player in unique_players.items():
|
||||
if player.bbref_id:
|
||||
continue
|
||||
|
||||
parts = player_name.split()
|
||||
if len(parts) == 3 and len(parts[1]) == 1:
|
||||
# Has middle initial pattern
|
||||
key = f"{parts[0]} {parts[2]}".lower()
|
||||
name_groups[key].append((player, player_name))
|
||||
elif len(parts) == 2:
|
||||
# No middle initial
|
||||
key = f"{parts[0]} {parts[1]}".lower()
|
||||
name_groups[key].append((player, player_name))
|
||||
|
||||
for key, player_list in name_groups.items():
|
||||
if len(player_list) > 1:
|
||||
# Multiple players with same first/last but different middles
|
||||
middle_initial_conflicts.append({
|
||||
'type': 'middle_initial_conflict',
|
||||
'base_name': key.title(),
|
||||
'players': [
|
||||
{
|
||||
'player_id': player.id,
|
||||
'player_name': name,
|
||||
'seasons': [player.season],
|
||||
'bbref_id': player.bbref_id
|
||||
}
|
||||
for player, name in player_list
|
||||
],
|
||||
'risk_reason': f'{len(player_list)} players with similar first/last names but different middle initials'
|
||||
})
|
||||
|
||||
logger.info(f"Found {len(middle_initial_conflicts)} middle initial conflicts")
|
||||
|
||||
return sba_conflicts, player_conflicts, middle_initial_conflicts
|
||||
|
||||
def generate_high_risk_csv(sba_conflicts, player_conflicts, middle_initial_conflicts):
|
||||
"""Generate CSV file with all high-risk matches"""
|
||||
|
||||
output_file = '/mnt/NV2/Development/major-domo/database/high_risk_player_matches.csv'
|
||||
|
||||
with open(output_file, 'w', newline='') as csvfile:
|
||||
writer = csv.writer(csvfile)
|
||||
|
||||
# Header
|
||||
writer.writerow([
|
||||
'risk_type', 'risk_reason', 'player_id', 'player_name', 'player_seasons',
|
||||
'sba1_id', 'sba1_name', 'sba1_bbref', 'sba2_id', 'sba2_name', 'sba2_bbref',
|
||||
'similarity_score', 'action_needed'
|
||||
])
|
||||
|
||||
# SbaPlayer conflicts
|
||||
for conflict in sba_conflicts:
|
||||
writer.writerow([
|
||||
conflict['type'],
|
||||
conflict['risk_reason'],
|
||||
'', # No player_id for SbaPlayer conflicts
|
||||
'', # No player_name
|
||||
'', # No seasons
|
||||
conflict['sba1_id'],
|
||||
conflict['sba1_name'],
|
||||
conflict['sba1_bbref'] or '',
|
||||
conflict['sba2_id'],
|
||||
conflict['sba2_name'],
|
||||
conflict['sba2_bbref'] or '',
|
||||
f"{conflict['similarity']:.3f}",
|
||||
'Verify these are different people, not duplicates'
|
||||
])
|
||||
|
||||
# Player ambiguous matches
|
||||
for conflict in player_conflicts:
|
||||
# Show top 2 potential matches
|
||||
matches = conflict['potential_matches'][:2]
|
||||
if len(matches) >= 2:
|
||||
writer.writerow([
|
||||
conflict['type'],
|
||||
conflict['risk_reason'],
|
||||
conflict['player_id'],
|
||||
conflict['player_name'],
|
||||
','.join(map(str, conflict['player_seasons'])),
|
||||
matches[0]['sba_id'],
|
||||
matches[0]['sba_name'],
|
||||
matches[0]['sba_bbref'] or '',
|
||||
matches[1]['sba_id'] if len(matches) > 1 else '',
|
||||
matches[1]['sba_name'] if len(matches) > 1 else '',
|
||||
matches[1]['sba_bbref'] if len(matches) > 1 else '',
|
||||
f"{matches[0]['similarity']:.3f}",
|
||||
f'Choose correct match from {len(conflict["potential_matches"])} options'
|
||||
])
|
||||
|
||||
# Middle initial conflicts
|
||||
for conflict in middle_initial_conflicts:
|
||||
players = conflict['players']
|
||||
if len(players) >= 2:
|
||||
writer.writerow([
|
||||
conflict['type'],
|
||||
conflict['risk_reason'],
|
||||
players[0]['player_id'],
|
||||
players[0]['player_name'],
|
||||
','.join(map(str, players[0]['seasons'])),
|
||||
'', # No SbaPlayer info yet
|
||||
'',
|
||||
'',
|
||||
players[1]['player_id'] if len(players) > 1 else '',
|
||||
players[1]['player_name'] if len(players) > 1 else '',
|
||||
'',
|
||||
'N/A',
|
||||
f'Verify these are different people: {", ".join([p["player_name"] for p in players])}'
|
||||
])
|
||||
|
||||
logger.info(f"Generated high-risk matches CSV: {output_file}")
|
||||
|
||||
# Generate summary
|
||||
summary_file = '/mnt/NV2/Development/major-domo/database/high_risk_matches_summary.txt'
|
||||
with open(summary_file, 'w') as f:
|
||||
f.write("HIGH-RISK PLAYER MATCHES SUMMARY\n")
|
||||
f.write("=" * 50 + "\n\n")
|
||||
f.write(f"SbaPlayer name conflicts: {len(sba_conflicts)}\n")
|
||||
f.write(f"Players with ambiguous matches: {len(player_conflicts)}\n")
|
||||
f.write(f"Middle initial conflicts: {len(middle_initial_conflicts)}\n")
|
||||
f.write(f"Total high-risk situations: {len(sba_conflicts) + len(player_conflicts) + len(middle_initial_conflicts)}\n\n")
|
||||
|
||||
f.write("RISK TYPES:\n")
|
||||
f.write("1. sbaplayer_conflict: Multiple SbaPlayers with very similar names\n")
|
||||
f.write("2. player_ambiguous_match: Player could match multiple SbaPlayers\n")
|
||||
f.write("3. middle_initial_conflict: Players with same first/last but different middle initials\n\n")
|
||||
|
||||
f.write("ACTION REQUIRED:\n")
|
||||
f.write("Review the CSV file to ensure correct matching and avoid linking wrong players.\n")
|
||||
|
||||
logger.info(f"Generated summary: {summary_file}")
|
||||
|
||||
return output_file, summary_file
|
||||
|
||||
def main():
|
||||
"""Main execution"""
|
||||
logger.info("Starting high-risk match analysis...")
|
||||
|
||||
sba_conflicts, player_conflicts, middle_initial_conflicts = find_high_risk_matches()
|
||||
|
||||
csv_file, summary_file = generate_high_risk_csv(sba_conflicts, player_conflicts, middle_initial_conflicts)
|
||||
|
||||
logger.info(f"\n=== HIGH-RISK ANALYSIS COMPLETE ===")
|
||||
logger.info(f"CSV file: {csv_file}")
|
||||
logger.info(f"Summary: {summary_file}")
|
||||
|
||||
total_risks = len(sba_conflicts) + len(player_conflicts) + len(middle_initial_conflicts)
|
||||
logger.info(f"Total high-risk situations found: {total_risks}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@ -0,0 +1,325 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Generate complete player assignments for ALL players:
|
||||
1. Automatic bbref_id matches
|
||||
2. Manual review decisions
|
||||
3. Create new SbaPlayers for remaining unmatched players
|
||||
"""
|
||||
import csv
|
||||
import json
|
||||
import logging
|
||||
from dataclasses import dataclass
|
||||
from typing import Dict, List, Set, Optional
|
||||
from collections import defaultdict
|
||||
|
||||
logging.basicConfig(level=logging.INFO)
|
||||
logger = logging.getLogger('CompleteAssignments')
|
||||
|
||||
@dataclass
|
||||
class PlayerRecord:
|
||||
id: int
|
||||
name: str
|
||||
season: int
|
||||
bbref_id: Optional[str] = None
|
||||
sbaplayer_id: Optional[int] = None
|
||||
|
||||
@dataclass
|
||||
class SbaPlayerRecord:
|
||||
id: int
|
||||
first_name: str
|
||||
last_name: str
|
||||
key_bbref: Optional[str] = None
|
||||
key_fangraphs: Optional[int] = None
|
||||
key_mlbam: Optional[int] = None
|
||||
key_retro: Optional[str] = None
|
||||
|
||||
@dataclass
|
||||
class NewSbaPlayer:
|
||||
first_name: str
|
||||
last_name: str
|
||||
key_bbref: Optional[str] = None
|
||||
temp_id: int = 0
|
||||
|
||||
def load_cached_data():
|
||||
"""Load cached player and sbaplayer data"""
|
||||
logger.info("Loading cached data...")
|
||||
|
||||
# Load SbaPlayers
|
||||
with open('/tmp/sbaplayers.json', 'r') as f:
|
||||
sbaplayer_data = json.load(f)
|
||||
|
||||
sbaplayers = []
|
||||
for data in sbaplayer_data:
|
||||
sbaplayers.append(SbaPlayerRecord(**data))
|
||||
|
||||
# Load all players
|
||||
all_players = []
|
||||
for season in range(1, 13):
|
||||
with open(f"/tmp/players_season_{season}.json", 'r') as f:
|
||||
season_data = json.load(f)
|
||||
|
||||
for data in season_data:
|
||||
all_players.append(PlayerRecord(**data))
|
||||
|
||||
logger.info(f"Loaded {len(sbaplayers)} SbaPlayers and {len(all_players)} player records")
|
||||
return all_players, sbaplayers
|
||||
|
||||
def parse_manual_decisions():
|
||||
"""Parse manual decisions from reviewed CSV files"""
|
||||
logger.info("Parsing manual decisions...")
|
||||
|
||||
manual_assignments = {} # player_id -> sbaplayer_id
|
||||
|
||||
# Parse unmatched decisions
|
||||
try:
|
||||
with open('/mnt/NV2/Development/major-domo/database/unmatched_players_for_review_updated.csv', 'r', encoding='utf-8') as f:
|
||||
reader = csv.DictReader(f)
|
||||
|
||||
for row in reader:
|
||||
resolution = row.get('resolution', '').strip()
|
||||
if not resolution or resolution == 'SKIP':
|
||||
continue
|
||||
|
||||
# Get column names dynamically
|
||||
player_id_key = next((k for k in row.keys() if 'player' in k.lower() and 'id' in k.lower()), 'player_id')
|
||||
bbref_id_key = next((k for k in row.keys() if 'bbref' in k.lower() and 'id' in k.lower()), 'bbref_id')
|
||||
suggested_id_key = next((k for k in row.keys() if 'suggested' in k.lower() and 'sbaplayer' in k.lower() and 'id' in k.lower()), 'suggested_sbaplayer_id')
|
||||
|
||||
player_id = int(row[player_id_key])
|
||||
player_name = row['name']
|
||||
bbref_id = row[bbref_id_key] if row[bbref_id_key] else None
|
||||
|
||||
if resolution == 'ACCEPT':
|
||||
suggested_id = row[suggested_id_key]
|
||||
if suggested_id and not suggested_id.startswith('PARTIAL:'):
|
||||
manual_assignments[player_id] = int(suggested_id)
|
||||
|
||||
elif resolution.startswith('USE_SBA_'):
|
||||
sbaplayer_id = int(resolution.replace('USE_SBA_', ''))
|
||||
manual_assignments[player_id] = sbaplayer_id
|
||||
|
||||
# Note: CREATE_NEW cases will be handled by creating new SbaPlayers
|
||||
|
||||
except FileNotFoundError:
|
||||
logger.warning("Unmatched decisions file not found")
|
||||
|
||||
# Parse high-risk decisions
|
||||
try:
|
||||
with open('/mnt/NV2/Development/major-domo/database/high_risk_player_matches_updated.csv', 'r', encoding='utf-8') as f:
|
||||
reader = csv.DictReader(f)
|
||||
|
||||
for row in reader:
|
||||
resolution = row.get('resolution', '').strip()
|
||||
if not resolution or resolution == 'SKIP':
|
||||
continue
|
||||
|
||||
# Get column names dynamically
|
||||
player_id_key = next((k for k in row.keys() if 'player' in k.lower() and 'id' in k.lower()), 'player_id')
|
||||
|
||||
if resolution.startswith('USE_SBA_') and row[player_id_key]:
|
||||
player_id = int(row[player_id_key])
|
||||
sbaplayer_id = int(resolution.replace('USE_SBA_', ''))
|
||||
manual_assignments[player_id] = sbaplayer_id
|
||||
|
||||
except FileNotFoundError:
|
||||
logger.warning("High-risk decisions file not found")
|
||||
|
||||
logger.info(f"Found {len(manual_assignments)} manual player assignments")
|
||||
return manual_assignments
|
||||
|
||||
def generate_complete_assignments(all_players, sbaplayers, manual_assignments):
|
||||
"""Generate assignments for ALL players"""
|
||||
|
||||
# Create lookup maps
|
||||
sbaplayers_by_bbref = {}
|
||||
for sba in sbaplayers:
|
||||
if sba.key_bbref:
|
||||
sbaplayers_by_bbref[sba.key_bbref] = sba
|
||||
|
||||
# Track assignments and new SbaPlayers needed
|
||||
all_assignments = [] # (player_id, sbaplayer_id, assignment_type)
|
||||
new_sbaplayers = []
|
||||
players_needing_new_sba = defaultdict(list) # group by unique identifier
|
||||
temp_id_counter = 90000
|
||||
|
||||
logger.info("Processing all player records...")
|
||||
|
||||
for player in all_players:
|
||||
assignment_type = ""
|
||||
sbaplayer_id = None
|
||||
|
||||
# 1. Check manual assignments first
|
||||
if player.id in manual_assignments:
|
||||
sbaplayer_id = manual_assignments[player.id]
|
||||
assignment_type = "manual_decision"
|
||||
|
||||
# 2. Try automatic bbref_id matching
|
||||
elif player.bbref_id and player.bbref_id in sbaplayers_by_bbref:
|
||||
sba = sbaplayers_by_bbref[player.bbref_id]
|
||||
sbaplayer_id = sba.id
|
||||
assignment_type = "automatic_bbref_match"
|
||||
|
||||
# 3. Player needs new SbaPlayer record
|
||||
else:
|
||||
# Group players who need new SbaPlayer records
|
||||
if player.bbref_id:
|
||||
# Group by bbref_id
|
||||
key = f"bbref:{player.bbref_id}"
|
||||
unique_name = player.name # Use name from any player with this bbref_id
|
||||
unique_bbref = player.bbref_id
|
||||
else:
|
||||
# Group by name
|
||||
key = f"name:{player.name}"
|
||||
unique_name = player.name
|
||||
unique_bbref = None
|
||||
|
||||
players_needing_new_sba[key].append(player)
|
||||
continue # Will process these after creating new SbaPlayers
|
||||
|
||||
# Add assignment
|
||||
if sbaplayer_id:
|
||||
all_assignments.append((player.id, sbaplayer_id, assignment_type))
|
||||
|
||||
logger.info(f"Direct assignments: {len(all_assignments)}")
|
||||
logger.info(f"Player groups needing new SbaPlayers: {len(players_needing_new_sba)}")
|
||||
|
||||
# Create new SbaPlayer records for remaining players
|
||||
for key, players in players_needing_new_sba.items():
|
||||
# Use the first player as representative
|
||||
representative = players[0]
|
||||
|
||||
# Parse name
|
||||
name_parts = representative.name.strip().split()
|
||||
if len(name_parts) >= 2:
|
||||
first_name = name_parts[0]
|
||||
last_name = ' '.join(name_parts[1:])
|
||||
else:
|
||||
first_name = representative.name
|
||||
last_name = ""
|
||||
|
||||
# Create new SbaPlayer
|
||||
new_sba = NewSbaPlayer(
|
||||
first_name=first_name,
|
||||
last_name=last_name,
|
||||
key_bbref=representative.bbref_id,
|
||||
temp_id=temp_id_counter
|
||||
)
|
||||
new_sbaplayers.append(new_sba)
|
||||
|
||||
# Assign all players in this group to the new SbaPlayer
|
||||
for player in players:
|
||||
all_assignments.append((player.id, temp_id_counter, "new_sbaplayer"))
|
||||
|
||||
temp_id_counter += 1
|
||||
|
||||
logger.info(f"Total assignments: {len(all_assignments)}")
|
||||
logger.info(f"New SbaPlayers to create: {len(new_sbaplayers)}")
|
||||
|
||||
return all_assignments, new_sbaplayers
|
||||
|
||||
def generate_csv_files(all_assignments, new_sbaplayers, all_players, sbaplayers):
|
||||
"""Generate the final CSV files"""
|
||||
|
||||
players_by_id = {p.id: p for p in all_players}
|
||||
sbaplayers_by_id = {sba.id: sba for sba in sbaplayers}
|
||||
|
||||
# Generate new SbaPlayers CSV
|
||||
logger.info("Generating new SbaPlayers CSV...")
|
||||
with open('/mnt/NV2/Development/major-domo/database/new_sbaplayers_to_insert_complete.csv', 'w', newline='') as csvfile:
|
||||
writer = csv.writer(csvfile)
|
||||
writer.writerow(['temp_id', 'first_name', 'last_name', 'key_bbref', 'key_fangraphs', 'key_mlbam', 'key_retro'])
|
||||
|
||||
for sba in new_sbaplayers:
|
||||
writer.writerow([
|
||||
sba.temp_id,
|
||||
sba.first_name,
|
||||
sba.last_name,
|
||||
sba.key_bbref or '',
|
||||
'', # key_fangraphs
|
||||
'', # key_mlbam
|
||||
'' # key_retro
|
||||
])
|
||||
|
||||
# Generate complete player assignments CSV
|
||||
logger.info("Generating complete player assignments CSV...")
|
||||
with open('/mnt/NV2/Development/major-domo/database/player_sbaplayer_assignments_complete.csv', 'w', newline='') as csvfile:
|
||||
writer = csv.writer(csvfile)
|
||||
writer.writerow([
|
||||
'player_id', 'player_name', 'player_season', 'player_bbref_id',
|
||||
'sbaplayer_id', 'sbaplayer_name', 'sbaplayer_bbref', 'assignment_type'
|
||||
])
|
||||
|
||||
for player_id, sbaplayer_id, assignment_type in all_assignments:
|
||||
player = players_by_id[player_id]
|
||||
|
||||
# Get SbaPlayer info
|
||||
if sbaplayer_id >= 90000:
|
||||
# New SbaPlayer (temp ID)
|
||||
sbaplayer_name = f"NEW_TEMP_{sbaplayer_id}"
|
||||
sbaplayer_bbref = player.bbref_id or ''
|
||||
else:
|
||||
# Existing SbaPlayer
|
||||
if sbaplayer_id in sbaplayers_by_id:
|
||||
sba = sbaplayers_by_id[sbaplayer_id]
|
||||
sbaplayer_name = f"{sba.first_name} {sba.last_name}"
|
||||
sbaplayer_bbref = sba.key_bbref or ''
|
||||
else:
|
||||
sbaplayer_name = f"UNKNOWN_SBA_{sbaplayer_id}"
|
||||
sbaplayer_bbref = ''
|
||||
|
||||
writer.writerow([
|
||||
player.id,
|
||||
player.name,
|
||||
player.season,
|
||||
player.bbref_id or '',
|
||||
sbaplayer_id,
|
||||
sbaplayer_name,
|
||||
sbaplayer_bbref,
|
||||
assignment_type
|
||||
])
|
||||
|
||||
# Generate summary
|
||||
with open('/mnt/NV2/Development/major-domo/database/complete_assignment_summary.txt', 'w') as f:
|
||||
f.write("COMPLETE PLAYER ASSIGNMENT SUMMARY\n")
|
||||
f.write("=" * 50 + "\n\n")
|
||||
|
||||
# Count by assignment type
|
||||
type_counts = defaultdict(int)
|
||||
for _, _, assignment_type in all_assignments:
|
||||
type_counts[assignment_type] += 1
|
||||
|
||||
f.write("ASSIGNMENT BREAKDOWN:\n")
|
||||
for assignment_type, count in type_counts.items():
|
||||
f.write(f" {assignment_type}: {count:,} players\n")
|
||||
|
||||
f.write(f"\nTOTAL ASSIGNMENTS: {len(all_assignments):,}\n")
|
||||
f.write(f"NEW SBAPLAYERS TO CREATE: {len(new_sbaplayers):,}\n\n")
|
||||
|
||||
f.write("FILES GENERATED:\n")
|
||||
f.write("1. new_sbaplayers_to_insert_complete.csv - New SbaPlayer records\n")
|
||||
f.write("2. player_sbaplayer_assignments_complete.csv - ALL player assignments\n")
|
||||
|
||||
def main():
|
||||
"""Generate complete assignments for all players"""
|
||||
logger.info("Generating complete player assignments...")
|
||||
|
||||
# Load data
|
||||
all_players, sbaplayers = load_cached_data()
|
||||
|
||||
# Parse manual decisions
|
||||
manual_assignments = parse_manual_decisions()
|
||||
|
||||
# Generate complete assignments
|
||||
all_assignments, new_sbaplayers = generate_complete_assignments(
|
||||
all_players, sbaplayers, manual_assignments
|
||||
)
|
||||
|
||||
# Generate CSV files
|
||||
generate_csv_files(all_assignments, new_sbaplayers, all_players, sbaplayers)
|
||||
|
||||
logger.info("\n=== COMPLETE ASSIGNMENT GENERATION COMPLETE ===")
|
||||
logger.info(f"Total player assignments: {len(all_assignments):,}")
|
||||
logger.info(f"New SbaPlayers needed: {len(new_sbaplayers):,}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@ -0,0 +1,267 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Generate CSV file of players who don't have SbaPlayer matches
|
||||
For manual review and matching
|
||||
"""
|
||||
import json
|
||||
import csv
|
||||
import logging
|
||||
from dataclasses import dataclass
|
||||
from typing import Dict, List, Set, Optional
|
||||
from collections import defaultdict
|
||||
|
||||
# Set up logging
|
||||
logging.basicConfig(
|
||||
level=logging.INFO,
|
||||
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
|
||||
handlers=[
|
||||
logging.FileHandler('/tmp/unmatched_players.log'),
|
||||
logging.StreamHandler()
|
||||
]
|
||||
)
|
||||
logger = logging.getLogger('UnmatchedPlayers')
|
||||
|
||||
@dataclass
|
||||
class PlayerRecord:
|
||||
id: int
|
||||
name: str
|
||||
season: int
|
||||
bbref_id: Optional[str] = None
|
||||
sbaplayer_id: Optional[int] = None
|
||||
|
||||
@dataclass
|
||||
class SbaPlayerRecord:
|
||||
id: int
|
||||
first_name: str
|
||||
last_name: str
|
||||
key_bbref: Optional[str] = None
|
||||
key_fangraphs: Optional[int] = None
|
||||
key_mlbam: Optional[int] = None
|
||||
key_retro: Optional[str] = None
|
||||
|
||||
def load_cached_data():
|
||||
"""Load all cached data from previous analysis"""
|
||||
|
||||
# Load SbaPlayers
|
||||
logger.info("Loading cached SbaPlayer data...")
|
||||
with open('/tmp/sbaplayers.json', 'r') as f:
|
||||
sbaplayer_data = json.load(f)
|
||||
|
||||
sbaplayers = []
|
||||
for data in sbaplayer_data:
|
||||
sbaplayers.append(SbaPlayerRecord(**data))
|
||||
|
||||
logger.info(f"Loaded {len(sbaplayers)} SbaPlayers")
|
||||
|
||||
# Load all player seasons
|
||||
logger.info("Loading cached player data...")
|
||||
all_players = []
|
||||
|
||||
for season in range(1, 13):
|
||||
cache_file = f"/tmp/players_season_{season}.json"
|
||||
try:
|
||||
with open(cache_file, 'r') as f:
|
||||
season_data = json.load(f)
|
||||
|
||||
for data in season_data:
|
||||
all_players.append(PlayerRecord(**data))
|
||||
|
||||
except FileNotFoundError:
|
||||
logger.error(f"Cache file for season {season} not found. Run analyze_player_data.py first.")
|
||||
return None, None
|
||||
|
||||
logger.info(f"Loaded {len(all_players)} player-season records")
|
||||
return all_players, sbaplayers
|
||||
|
||||
def find_unmatched_players(all_players: List[PlayerRecord], sbaplayers: List[SbaPlayerRecord]):
|
||||
"""Find all players that don't have matches"""
|
||||
|
||||
# Create lookup for SbaPlayers by bbref_id
|
||||
sbaplayer_by_bbref = {}
|
||||
for sba in sbaplayers:
|
||||
if sba.key_bbref:
|
||||
sbaplayer_by_bbref[sba.key_bbref] = sba
|
||||
|
||||
# Group players by unique identifier
|
||||
unique_players = {} # Will store one representative PlayerRecord for each unique player
|
||||
|
||||
# First pass: group by bbref_id where available
|
||||
players_by_bbref = defaultdict(list)
|
||||
players_without_bbref = []
|
||||
|
||||
for player in all_players:
|
||||
if player.bbref_id:
|
||||
players_by_bbref[player.bbref_id].append(player)
|
||||
else:
|
||||
players_without_bbref.append(player)
|
||||
|
||||
# Find unmatched players with bbref_id
|
||||
unmatched_with_bbref = []
|
||||
for bbref_id, players in players_by_bbref.items():
|
||||
if bbref_id not in sbaplayer_by_bbref:
|
||||
# This bbref_id has no match in SbaPlayers
|
||||
# Use the most recent season's player record as representative
|
||||
representative = max(players, key=lambda p: p.season)
|
||||
unmatched_with_bbref.append(representative)
|
||||
|
||||
logger.info(f"Found {len(unmatched_with_bbref)} unique players with bbref_id but no SbaPlayer match")
|
||||
|
||||
# Group players without bbref_id by name
|
||||
players_by_name = defaultdict(list)
|
||||
for player in players_without_bbref:
|
||||
players_by_name[player.name].append(player)
|
||||
|
||||
unmatched_without_bbref = []
|
||||
for name, players in players_by_name.items():
|
||||
# Use the most recent season's player record as representative
|
||||
representative = max(players, key=lambda p: p.season)
|
||||
unmatched_without_bbref.append(representative)
|
||||
|
||||
logger.info(f"Found {len(unmatched_without_bbref)} unique players without bbref_id")
|
||||
|
||||
return unmatched_with_bbref, unmatched_without_bbref
|
||||
|
||||
def generate_csv_reports(unmatched_with_bbref: List[PlayerRecord], unmatched_without_bbref: List[PlayerRecord], sbaplayers: List[SbaPlayerRecord]):
|
||||
"""Generate CSV files for manual review"""
|
||||
|
||||
# Generate main unmatched players file
|
||||
output_file = '/tmp/unmatched_players_for_review.csv'
|
||||
|
||||
with open(output_file, 'w', newline='') as csvfile:
|
||||
writer = csv.writer(csvfile)
|
||||
|
||||
# Header
|
||||
writer.writerow([
|
||||
'player_id', 'name', 'season', 'bbref_id', 'match_type', 'seasons_appeared',
|
||||
'suggested_sbaplayer_id', 'suggested_sbaplayer_name', 'suggested_match_reason'
|
||||
])
|
||||
|
||||
# Players with bbref_id but no match
|
||||
for player in sorted(unmatched_with_bbref, key=lambda p: p.name):
|
||||
# Get all seasons this player appeared in
|
||||
all_seasons = []
|
||||
cache_file = f"/tmp/players_season_{player.season}.json"
|
||||
|
||||
# Find all seasons for this bbref_id across all cached data
|
||||
seasons_found = []
|
||||
for season in range(1, 13):
|
||||
try:
|
||||
with open(f"/tmp/players_season_{season}.json", 'r') as f:
|
||||
season_data = json.load(f)
|
||||
|
||||
for p_data in season_data:
|
||||
if p_data.get('bbref_id') == player.bbref_id:
|
||||
seasons_found.append(season)
|
||||
break
|
||||
except:
|
||||
continue
|
||||
|
||||
seasons_str = ','.join(map(str, sorted(seasons_found)))
|
||||
|
||||
writer.writerow([
|
||||
player.id,
|
||||
player.name,
|
||||
player.season,
|
||||
player.bbref_id,
|
||||
'has_bbref_no_match',
|
||||
seasons_str,
|
||||
'', # suggested_sbaplayer_id (empty for manual fill)
|
||||
'', # suggested_sbaplayer_name (empty for manual fill)
|
||||
'No existing SbaPlayer with this bbref_id'
|
||||
])
|
||||
|
||||
# Players without bbref_id
|
||||
for player in sorted(unmatched_without_bbref, key=lambda p: p.name):
|
||||
# Get all seasons this player appeared in by name
|
||||
seasons_found = []
|
||||
for season in range(1, 13):
|
||||
try:
|
||||
with open(f"/tmp/players_season_{season}.json", 'r') as f:
|
||||
season_data = json.load(f)
|
||||
|
||||
for p_data in season_data:
|
||||
if p_data.get('name') == player.name and not p_data.get('bbref_id'):
|
||||
seasons_found.append(season)
|
||||
break
|
||||
except:
|
||||
continue
|
||||
|
||||
seasons_str = ','.join(map(str, sorted(seasons_found)))
|
||||
|
||||
# Try to suggest a match from existing SbaPlayers by name
|
||||
suggested_id = ''
|
||||
suggested_name = ''
|
||||
suggested_reason = 'No bbref_id available'
|
||||
|
||||
for sba in sbaplayers:
|
||||
sba_full_name = f"{sba.first_name} {sba.last_name}"
|
||||
if sba_full_name.lower() == player.name.lower():
|
||||
suggested_id = str(sba.id)
|
||||
suggested_name = sba_full_name
|
||||
suggested_reason = 'Exact name match found in SbaPlayers'
|
||||
break
|
||||
elif (sba.first_name.lower() in player.name.lower() and
|
||||
sba.last_name.lower() in player.name.lower()):
|
||||
# Partial match - suggest but flag for review
|
||||
if not suggested_id: # Only suggest first partial match
|
||||
suggested_id = f"PARTIAL:{sba.id}"
|
||||
suggested_name = sba_full_name
|
||||
suggested_reason = 'Partial name match - REVIEW NEEDED'
|
||||
|
||||
writer.writerow([
|
||||
player.id,
|
||||
player.name,
|
||||
player.season,
|
||||
player.bbref_id or '',
|
||||
'no_bbref',
|
||||
seasons_str,
|
||||
suggested_id,
|
||||
suggested_name,
|
||||
suggested_reason
|
||||
])
|
||||
|
||||
logger.info(f"Generated CSV report: {output_file}")
|
||||
|
||||
# Generate summary statistics
|
||||
summary_file = '/tmp/unmatched_players_summary.txt'
|
||||
with open(summary_file, 'w') as f:
|
||||
f.write("UNMATCHED PLAYERS SUMMARY\n")
|
||||
f.write("=" * 50 + "\n\n")
|
||||
f.write(f"Players with bbref_id but no SbaPlayer match: {len(unmatched_with_bbref)}\n")
|
||||
f.write(f"Players without bbref_id: {len(unmatched_without_bbref)}\n")
|
||||
f.write(f"Total unique unmatched players: {len(unmatched_with_bbref) + len(unmatched_without_bbref)}\n\n")
|
||||
|
||||
f.write("NEXT STEPS:\n")
|
||||
f.write("1. Review the CSV file: /tmp/unmatched_players_for_review.csv\n")
|
||||
f.write("2. For players with suggested matches, verify they are correct\n")
|
||||
f.write("3. For players marked 'PARTIAL:', carefully review the suggestion\n")
|
||||
f.write("4. Fill in the suggested_sbaplayer_id column for matches you want to use\n")
|
||||
f.write("5. Leave suggested_sbaplayer_id empty for players needing new SbaPlayer records\n")
|
||||
|
||||
logger.info(f"Generated summary: {summary_file}")
|
||||
|
||||
return output_file, summary_file
|
||||
|
||||
def main():
|
||||
"""Main execution"""
|
||||
logger.info("Starting unmatched players report generation...")
|
||||
|
||||
# Load cached data
|
||||
all_players, sbaplayers = load_cached_data()
|
||||
if not all_players or not sbaplayers:
|
||||
logger.error("Failed to load cached data. Run analyze_player_data.py first.")
|
||||
return
|
||||
|
||||
# Find unmatched players
|
||||
unmatched_with_bbref, unmatched_without_bbref = find_unmatched_players(all_players, sbaplayers)
|
||||
|
||||
# Generate CSV reports
|
||||
csv_file, summary_file = generate_csv_reports(unmatched_with_bbref, unmatched_without_bbref, sbaplayers)
|
||||
|
||||
logger.info(f"\n=== REPORT COMPLETE ===")
|
||||
logger.info(f"CSV file for review: {csv_file}")
|
||||
logger.info(f"Summary: {summary_file}")
|
||||
logger.info(f"Total unmatched unique players: {len(unmatched_with_bbref) + len(unmatched_without_bbref)}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@ -0,0 +1,15 @@
|
||||
HIGH-RISK PLAYER MATCHES SUMMARY
|
||||
==================================================
|
||||
|
||||
SbaPlayer name conflicts: 28
|
||||
Players with ambiguous matches: 796
|
||||
Middle initial conflicts: 3
|
||||
Total high-risk situations: 827
|
||||
|
||||
RISK TYPES:
|
||||
1. sbaplayer_conflict: Multiple SbaPlayers with very similar names
|
||||
2. player_ambiguous_match: Player could match multiple SbaPlayers
|
||||
3. middle_initial_conflict: Players with same first/last but different middle initials
|
||||
|
||||
ACTION REQUIRED:
|
||||
Review the CSV file to ensure correct matching and avoid linking wrong players.
|
||||
@ -0,0 +1,828 @@
|
||||
risk_type,risk_reason,player_id,player_name,player_seasons,sba1_id,sba1_name,sba1_bbref,sba2_id,sba2_name,sba2_bbref,similarity_score,action_needed
|
||||
sbaplayer_conflict,Very similar SbaPlayer names (similarity: 1.000),,,,45,Logan Allen,allenlo01,48,Logan Allen,allenlo02,1.000,"Verify these are different people, not duplicates"
|
||||
sbaplayer_conflict,Very similar SbaPlayer names (similarity: 0.815),,,,298,Miguel Cabrera,cabremi01,300,Melky Cabrera,cabreme01,0.815,"Verify these are different people, not duplicates"
|
||||
sbaplayer_conflict,Very similar SbaPlayer names (similarity: 1.000),,,,341,Diego Castillo,castidi02,345,Diego Castillo,castidi01,1.000,"Verify these are different people, not duplicates"
|
||||
sbaplayer_conflict,Very similar SbaPlayer names (similarity: 0.824),,,,410,Willson Contreras,contrwi01,411,William Contreras,contrwi02,0.824,"Verify these are different people, not duplicates"
|
||||
sbaplayer_conflict,Very similar SbaPlayer names (similarity: 0.880),,,,682,Robel Garcia,garciro02,692,Robert Garcia,garciro04,0.880,"Verify these are different people, not duplicates"
|
||||
sbaplayer_conflict,Very similar SbaPlayer names (similarity: 0.818),,,,689,Rony Garcia,garciro03,693,Rico Garcia,garciri01,0.818,"Verify these are different people, not duplicates"
|
||||
sbaplayer_conflict,Very similar SbaPlayer names (similarity: 1.000),,,,784,Javy Guerra,guerrja02,786,Javy Guerra,guerrja01,1.000,"Verify these are different people, not duplicates"
|
||||
sbaplayer_conflict,Very similar SbaPlayer names (similarity: 0.839),,,,870,Cesar Hernandez,hernace02,880,Carlos Hernandez,hernaca04,0.839,"Verify these are different people, not duplicates"
|
||||
sbaplayer_conflict,Very similar SbaPlayer names (similarity: 0.818),,,,893,John Hicks,hicksjo02,894,Jordan Hicks,hicksjo03,0.818,"Verify these are different people, not duplicates"
|
||||
sbaplayer_conflict,Very similar SbaPlayer names (similarity: 0.833),,,,1222,Jose Martinez,martijo08,1229,JD Martinez,martijd02,0.833,"Verify these are different people, not duplicates"
|
||||
sbaplayer_conflict,Very similar SbaPlayer names (similarity: 0.833),,,,1603,Neil Ramirez,ramirne01,1605,Nick Ramirez,ramirni01,0.833,"Verify these are different people, not duplicates"
|
||||
sbaplayer_conflict,Very similar SbaPlayer names (similarity: 0.870),,,,1603,Neil Ramirez,ramirne01,1606,Noe Ramirez,ramirno01,0.870,"Verify these are different people, not duplicates"
|
||||
sbaplayer_conflict,Very similar SbaPlayer names (similarity: 0.846),,,,1639,Mark Reynolds,reynoma01,1640,Matt Reynolds,reynoma03,0.846,"Verify these are different people, not duplicates"
|
||||
sbaplayer_conflict,Very similar SbaPlayer names (similarity: 0.839),,,,1662,David Robertson,roberda08,1663,Daniel Robertson,roberda10,0.839,"Verify these are different people, not duplicates"
|
||||
sbaplayer_conflict,Very similar SbaPlayer names (similarity: 0.867),,,,1672,Ronny Rodriguez,rodriro03,1683,Randy Rodriguez,rodrira02,0.867,"Verify these are different people, not duplicates"
|
||||
sbaplayer_conflict,Very similar SbaPlayer names (similarity: 0.812),,,,1674,Richard Rodriguez,rodriri05,1683,Randy Rodriguez,rodrira02,0.812,"Verify these are different people, not duplicates"
|
||||
sbaplayer_conflict,Very similar SbaPlayer names (similarity: 0.867),,,,1673,Joely Rodriguez,rodrijo06,1677,Jefry Rodriguez,rodrije01,0.867,"Verify these are different people, not duplicates"
|
||||
sbaplayer_conflict,Very similar SbaPlayer names (similarity: 0.828),,,,1679,Elvin Rodriguez,rodriel02,1685,Endy Rodriguez,rodrien01,0.828,"Verify these are different people, not duplicates"
|
||||
sbaplayer_conflict,Very similar SbaPlayer names (similarity: 0.880),,,,1689,Taylor Rogers,rogerta01,1691,Tyler Rogers,rogerty01,0.880,"Verify these are different people, not duplicates"
|
||||
sbaplayer_conflict,Very similar SbaPlayer names (similarity: 0.900),,,,1695,Josh Rojas,rojasjo01,1696,Jose Rojas,rojasjo02,0.900,"Verify these are different people, not duplicates"
|
||||
sbaplayer_conflict,Very similar SbaPlayer names (similarity: 0.857),,,,1695,Josh Rojas,rojasjo01,1697,Johan Rojas,rojasjo03,0.857,"Verify these are different people, not duplicates"
|
||||
sbaplayer_conflict,Very similar SbaPlayer names (similarity: 0.815),,,,1760,Danny Santana,santada01,1762,Dennis Santana,santade01,0.815,"Verify these are different people, not duplicates"
|
||||
sbaplayer_conflict,Very similar SbaPlayer names (similarity: 0.833),,,,1787,Tayler Scott,scottta02,1788,Tanner Scott,scottta01,0.833,"Verify these are different people, not duplicates"
|
||||
sbaplayer_conflict,Very similar SbaPlayer names (similarity: 1.000),,,,1841,Will Smith,smithwi05,1843,Will Smith,smithwi04,1.000,"Verify these are different people, not duplicates"
|
||||
sbaplayer_conflict,Very similar SbaPlayer names (similarity: 0.842),,,,1842,Joe Smith,smithjo05,1852,Josh Smith,smithjo11,0.842,"Verify these are different people, not duplicates"
|
||||
sbaplayer_conflict,Very similar SbaPlayer names (similarity: 0.857),,,,1845,Caleb Smith,smithca03,1853,Cade Smith,smithca06,0.857,"Verify these are different people, not duplicates"
|
||||
sbaplayer_conflict,Very similar SbaPlayer names (similarity: 0.909),,,,1847,Kevan Smith,smithke04,1854,Kevin Smith,smithke05,0.909,"Verify these are different people, not duplicates"
|
||||
sbaplayer_conflict,Very similar SbaPlayer names (similarity: 0.923),,,,1981,Zach Thompson,thompza01,1985,Zack Thompson,thompza02,0.923,"Verify these are different people, not duplicates"
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,5092,Robbie Ray,5,1620,Robbie Ray,rayro02,578,Robbie Erlin,erlinro01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4302,Mike Mayers,5,1251,Mike Mayers,mayermi01,615,Mike Fiers,fiersmi01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 12 different SbaPlayers,4827,Carlos Martinez,5,1223,Carlos Martinez,martica04,1222,Jose Martinez,martijo08,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4900,Gary Sanchez,5,1746,Gary Sanchez,sanchga02,1745,Aaron Sanchez,sanchaa01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,1772,Ranger Suarez,3,1936,Ranger Suarez,suarera01,1933,Albert Suarez,suareal01,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,4433,Jonathan Loaisiga,5,1132,Jonathan Loaisiga,loaisjo01,470,Jonathan Davis,davisjo05,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4175,Corbin Burnes,5,286,Corbin Burnes,burneco01,133,Jacob Barnes,barneja01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4234,Brandon Woodruff,5,2196,Brandon Woodruff,woodrbr01,535,Brandon Drury,drurybr01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4565,Josh Hader,5,802,Josh Hader,haderjo01,2175,Josh Winder,windejo01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,4474,Tyler Mahle,5,1183,Tyler Mahle,mahlety01,1244,Tyler Matzek,matzety01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4632,Freddy Peralta,5,1525,Freddy Peralta,peralfr01,1522,David Peralta,peralda01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4162,Trevor Bauer,5,150,Trevor Bauer,bauertr01,1248,Trevor May,maytr01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4324,Pablo Lopez,5,1146,Pablo Lopez,lopezpa01,1148,Alejo Lopez,lopezal03,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4364,John Means,5,2,John Means,meansjo01,677,John Gant,gantjo01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4341,Kevin Gausman,5,706,Kevin Gausman,gausmke01,1420,Kevin Newman,newmake01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,4509,Tyler Glasnow,5,726,Tyler Glasnow,glasnty01,1460,Tyler Olson,olsonty01,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,5148,Trevor Rogers,5,1693,Trevor Rogers,rogertr01,1691,Tyler Rogers,rogerty01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4582,Sonny Gray,5,765,Sonny Gray,grayso01,766,Jon Gray,grayjo02,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 8 different SbaPlayers,4504,Luis Castillo,5,344,Luis Castillo,castilu02,342,Jose Castillo,castijo02,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,4144,Jordan Romano,5,1699,Jordan Romano,romanjo03,778,Jordan Groshans,groshjo01,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,5080,Patrick Sandoval,5,1754,Patrick Sandoval,sandopa02,1753,Pablo Sandoval,sandopa01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4570,Lucas Giolito,5,724,Lucas Giolito,giolilu01,719,Lucas Gilbreath,gilbrlu01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,1193,Chris Sale,3,1739,Chris Sale,salech01,85,Chris Archer,archech01,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4421,Julio Urias,5,2038,Julio Urias,uriasju01,2039,Luis Urias,uriaslu01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4628,Chad Green,5,768,Chad Green,greench03,769,Shane Greene,greensh02,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,1017,Aaron Sanchez,3,1745,Aaron Sanchez,sanchaa01,1746,Gary Sanchez,sanchga02,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 8 different SbaPlayers,4147,Ian Anderson,5,74,Ian Anderson,anderia01,69,Brian Anderson,anderbr06,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 6 different SbaPlayers,5044,Michael Fulmer,5,666,Michael Fulmer,fulmemi01,1721,Michael Rucker,ruckemi01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,4714,Charlie Morton,5,1375,Charlie Morton,mortoch02,1991,Charlie Tilson,tilsoch01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,4788,Andrew Chafin,5,363,Andrew Chafin,chafian01,843,Andrew Heaney,heanean01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,1976,Wily Peralta,3,1523,Wily Peralta,peralwi01,1524,Wandy Peralta,peralwa01,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 14 different SbaPlayers,4826,Carlos Hernandez,5,880,Carlos Hernandez,hernaca04,870,Cesar Hernandez,hernace02,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4711,Raisel Iglesias,5,950,Raisel Iglesias,iglesra01,949,Jose Iglesias,iglesjo01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,4662,Justin Dunn,5,546,Justin Dunn,dunnju01,2034,Justin Upton,uptonju01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4727,Scott Barlow,5,128,Scott Barlow,barlosc01,129,Joe Barlow,barlojo01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4246,Jose Urquidy,5,2041,Jose Urquidy,urquijo01,1724,Jose Ruiz,ruizjo01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4454,Sandy Alcantara,5,35,Sandy Alcantara,alcansa01,34,Sergio Alcantara,alcanse01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4252,Zach Eflin,5,562,Zach Eflin,eflinza01,1406,Zach Neal,nealza01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,5007,Kyle Gibson,5,715,Kyle Gibson,gibsoky01,830,Kyle Harrison,harriky01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 8 different SbaPlayers,1516,Jose Suarez,3,1937,Jose Suarez,suarejo01,59,Jose Alvarez,alvarjo02,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4842,Cole Sulser,5,1942,Cole Sulser,sulseco01,2022,Cole Tucker,tuckeco01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4256,Garrett Crochet,5,439,Garrett Crochet,crochga01,1340,Garrett Mitchell,mitchga01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4124,Tanner Houck,5,927,Tanner Houck,houckta01,1659,Tanner Roark,roarkta01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,1268,Dillon Peters,3,1544,Dillon Peters,peterdi01,1195,Dillon Maples,mapledi01,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,1631,Marcus Stroman,3,1928,Marcus Stroman,stromma01,1799,Marcus Semien,semiema01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 8 different SbaPlayers,4490,Jarlin Garcia,5,684,Jarlin Garcia,garcija04,683,Aramis Garcia,garciar01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4219,Liam Hendriks,5,857,Liam Hendriks,hendrli01,856,Kyle Hendricks,hendrky01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,1038,Adrian Sampson,3,1742,Adrian Sampson,sampsad01,1363,Adrian Morejon,morejad01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,5022,Luke Jackson,5,960,Luke Jackson,jackslu01,961,Alex Jackson,jacksal02,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,4200,Kyle Freeland,5,650,Kyle Freeland,freelky01,654,Tyler Freeman,freemty01,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4689,Aaron Civale,5,383,Aaron Civale,civalaa01,55,Aaron Altherr,altheaa01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4870,Dominic Leone,5,1116,Dominic Leone,leonedo01,322,Dominic Canzone,canzodo01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4663,Kenley Jansen,5,968,Kenley Jansen,janseke01,969,Danny Jansen,janseda01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4228,Clayton Kershaw,5,1034,Clayton Kershaw,kershcl01,1644,Clayton Richard,richacl01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 6 different SbaPlayers,4765,Dylan Cease,5,355,Dylan Cease,ceasedy01,433,Dylan Crews,crewsdy01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,4569,Jose Berrios,5,182,Jose Berrios,berrijo01,139,Jose Barrero,garcijo02,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4187,Luis H Garcia,5,694,Luis Garcia Jr,garcilu04,690,Adolis Garcia,garciad02,0.815,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4946,Jesse Chavez,5,370,Jesse Chavez,chaveje01,804,Jesse Hahn,hahnje01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4288,Tyler Matzek,5,1244,Tyler Matzek,matzety01,1183,Tyler Mahle,mahlety01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 11 different SbaPlayers,4617,Richard Rodriguez,5,1674,Richard Rodriguez,rodriri05,1683,Randy Rodriguez,rodrira02,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,4874,Drew Smith,5,1848,Drew Smith,smithdr01,1853,Cade Smith,smithca06,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,4517,Tyler Alexander,5,37,Tyler Alexander,alexaty01,39,Blaze Alexander,alexabl01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4644,Ryan Pressly,5,1584,Ryan Pressly,pressry01,853,Ryan Helsley,helslry01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 8 different SbaPlayers,4172,Devin Williams,5,2158,Devin Williams,willide03,2160,Gavin Williams,williga01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,4346,Marco Gonzales,5,735,Marco Gonzales,gonzama02,740,Carlos Gonzalez,gonzaca01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 6 different SbaPlayers,4725,Tyler Rogers,5,1691,Tyler Rogers,rogerty01,1689,Taylor Rogers,rogerta01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4696,Ryan Tepera,5,1974,Ryan Tepera,teperry01,2128,Ryan Weber,weberry01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 8 different SbaPlayers,4266,Jose Alvarez,5,59,Jose Alvarez,alvarjo02,58,Jose Alvarado,alvarjo03,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,1217,Corey Kluber,3,1060,Corey Kluber,klubeco01,1063,Corey Knebel,knebeco01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4989,Josh Taylor,5,1967,Josh Taylor,taylojo02,1404,Josh Naylor,naylojo01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4845,Corey Knebel,5,1063,Corey Knebel,knebeco01,1060,Corey Kluber,klubeco01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,4497,Connor Brogdon,5,261,Connor Brogdon,brogdco01,2189,Connor Wong,wongco01,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,4300,Cristian Javier,5,971,Cristian Javier,javiecr01,2104,Christian Walker,walkech02,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 8 different SbaPlayers,4479,Michael Pineda,5,1560,Michael Pineda,pinedmi01,1047,Michael King,kingmi01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,5128,Steven Matz,5,1243,Steven Matz,matzst01,243,Steven Brault,braulst01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4319,Jaime Barria,5,141,Jaime Barria,barrija01,94,Jake Arrieta,arrieja01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4910,Hector Neris,5,1413,Hector Neris,nerishe01,1429,Hector Noesi,noesihe01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,5088,Reynaldo Lopez,5,1145,Reynaldo Lopez,lopezre01,1146,Pablo Lopez,lopezpa01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,4660,Will Smith,5,1841,Will Smith,smithwi05,1843,Will Smith,smithwi04,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 13 different SbaPlayers,1292,Eduardo Rodriguez,3,1675,Eduardo Rodriguez,rodried05,1671,Sean Rodriguez,rodrise01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 9 different SbaPlayers,5106,Ryan Thompson,5,1983,Ryan Thompson,thompry02,1984,Mason Thompson,thompma02,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4568,Dylan Floro,5,629,Dylan Floro,florody01,1358,Dylan Moore,mooredy01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 7 different SbaPlayers,5045,Michael King,5,1047,Michael King,kingmi01,1998,Michael Tonkin,tonkimi01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4784,Alex Wood,5,2193,Alex Wood,woodal02,2194,James Wood,woodja03,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 6 different SbaPlayers,4220,Darwinzon Hernandez,5,877,Darwinzon Hernandez,hernada02,868,David Hernandez,hernada01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4635,Taylor Widener,5,2149,Taylor Widener,widenta01,2116,Taylor Ward,wardta01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 9 different SbaPlayers,4429,Noe Ramirez,5,1606,Noe Ramirez,ramirno01,1603,Neil Ramirez,ramirne01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4708,Gregory Soto,5,1878,Gregory Soto,sotogr01,1767,Gregory Santos,santogr01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 8 different SbaPlayers,4710,Matt Barnes,5,131,Matt Barnes,barnema01,241,Matt Brash,brashma01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4838,Chris Stratton,5,1922,Chris Stratton,stratch01,1923,Hunter Stratton,strathu01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,5023,Luke Weaver,5,2124,Luke Weaver,weavelu01,118,Luken Baker,bakerlu01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4338,Blake Snell,5,1861,Blake Snell,snellbl01,1735,Blake Sabol,sabolbl01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,1272,Domingo German,3,713,Domingo German,germado01,1120,Domingo Leyba,leybado01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,4960,Jon Gray,5,766,Jon Gray,grayjo02,973,Jon Jay,jayjo02,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4390,Dillon Tate,5,1959,Dillon Tate,tatedi01,1195,Dillon Maples,mapledi01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4377,Blake Parker,5,1499,Blake Parker,parkebl01,1543,Blake Perkins,perkibl01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,5024,Madison Bumgarner,5,278,Madison Bumgarner,bumgama01,127,Addison Barger,bargead01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,5147,Trevor Richards,5,1646,Trevor Richards,richatr01,1693,Trevor Rogers,rogertr01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4473,Tyler Duffey,5,540,Tyler Duffey,duffety01,2094,Tyler Wade,wadety01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 8 different SbaPlayers,4335,Elieser Hernandez,5,874,Elieser Hernandez,hernael01,867,Felix Hernandez,hernafe02,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 6 different SbaPlayers,4277,Diego Castillo,5,341,Diego Castillo,castidi02,345,Diego Castillo,castidi01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 13 different SbaPlayers,4659,Tyler Anderson,5,68,Tyler Anderson,anderty01,604,Tyler Ferguson,ferguty01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4362,Rich Hill,5,898,Rich Hill,hillri01,900,Tim Hill,hillti01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4549,James Karinchak,5,1009,James Karinchak,karinja01,1008,James Kaprielian,kaprija01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,4679,Wandy Peralta,5,1524,Wandy Peralta,peralwa01,1523,Wily Peralta,peralwi01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,5095,Robert Stephenson,5,1904,Robert Stephenson,stephro01,1905,Tyler Stephenson,stephty01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,4580,Pierce Johnson,5,985,Pierce Johnson,johnspi01,987,Bryce Johnson,johnsbr03,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 6 different SbaPlayers,4387,Yohan Ramirez,5,1611,Yohan Ramirez,ramiryo01,1606,Noe Ramirez,ramirno01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 8 different SbaPlayers,1515,Jose Ruiz,3,1724,Jose Ruiz,ruizjo01,1830,Jose Siri,sirijo01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,1141,Bryan Shaw,3,1808,Bryan Shaw,shawbr01,2191,Bryan Woo,woobr01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4585,Jake McGee,5,1274,Jake McGee,mcgeeja01,1315,Jake Meyers,meyerja02,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,2011,Zack Littell,3,1127,Zack Littell,litteza01,1024,Zack Kelly,kellyza01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4243,Edwin Diaz,5,503,Edwin Diaz,diazed04,506,Lewin Diaz,diazle01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4577,Joe Kelly,5,1021,Joe Kelly,kellyjo05,20,Jo Adell,adelljo01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,2575,Hunter Strickland,1,1925,Hunter Strickland,strichu01,1923,Hunter Stratton,strathu01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4925,Jack Flaherty,5,622,Jack Flaherty,flaheja01,621,Ryan Flaherty,flahery01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,2252,Edgar Santana,1,1763,Edgar Santana,santaed01,1758,Ervin Santana,santaer01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,1466,Joe Ross,3,1715,Joe Ross,rossjo01,1696,Jose Rojas,rojasjo02,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 10 different SbaPlayers,4303,Victor Gonzalez,5,743,Victor Gonzalez,gonzavi02,739,Gio Gonzalez,gonzagi01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4489,Archie Bradley,5,236,Archie Bradley,bradlar01,239,Jackie Bradley Jr,bradlja02,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4389,Austin Gomber,5,730,Austin Gomber,gombeau01,1704,Austin Romine,rominau01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,4851,Daniel Hudson,5,933,Daniel Hudson,hudsoda01,988,Daniel Johnson,johnsda07,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,5066,Nick Neidert,5,1408,Nick Neidert,neideni01,71,Nick Anderson,anderni01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4431,Zack Greinke,5,774,Zack Greinke,greinza01,1628,Zac Reininger,reiniza01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,5054,Mike Minor,5,1335,Mike Minor,minormi01,1370,Mike Morin,morinmi01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,5107,Ryne Harper,5,824,Ryne Harper,harpery01,823,Bryce Harper,harpebr03,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4783,Alex Reyes,5,1635,Alex Reyes,reyesal02,1637,Pablo Reyes,reyespa01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4914,Humberto Castellanos,5,339,Humberto Castellanos,castehu01,97,Humberto Arteaga,arteahu01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4526,Brent Suter,5,1943,Brent Suter,suterbr01,942,Brant Hurter,hurtebr01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,4310,Caleb Smith,5,1845,Caleb Smith,smithca03,1853,Cade Smith,smithca06,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4754,Dane Dunning,5,548,Dane Dunning,dunnida01,977,Dan Jennings,jennida01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 6 different SbaPlayers,5133,Taylor Rogers,5,1689,Taylor Rogers,rogerta01,1691,Tyler Rogers,rogerty01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4308,Kyle Hendricks,5,856,Kyle Hendricks,hendrky01,435,Kyle Crick,crickky01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,4171,Chris Martin,5,1214,Chris Martin,martich02,1216,Richie Martin,martiri01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 14 different SbaPlayers,5017,Luis Garcia,5,694,Luis Garcia Jr,garcilu04,690,Adolis Garcia,garciad02,0.880,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4656,Tyler Kinley,5,1050,Tyler Kinley,kinlety01,717,Tyler Gilbert,gilbety01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4434,Aaron Bummer,5,279,Aaron Bummer,bummeaa01,667,Carson Fulmer,fulmeca01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 7 different SbaPlayers,4194,Yimi Garcia,5,680,Yimi Garcia,garciyi01,688,Deivi Garcia,garcide01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4436,Martin Perez,5,1535,Martin Perez,perezma02,1582,Martin Prado,pradoma01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,4571,Miguel Castro,5,350,Miguel Castro,castrmi01,1757,Miguel Sano,sanomi01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4652,John Gant,5,677,John Gant,gantjo01,2,John Means,meansjo01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4416,Blake Taylor,5,1966,Blake Taylor,taylobl01,1968,Beau Taylor,taylobe11,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,5158,Wade LeBlanc,5,1104,Wade LeBlanc,leblawa01,1105,Charles Leblanc,leblach01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4825,Carlos Estevez,5,585,Carlos Estevez,estevca01,1537,Carlos Perez,perezca02,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 6 different SbaPlayers,5149,Trevor Williams,5,2156,Trevor Williams,willitr01,2155,Taylor Williams,willita01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 6 different SbaPlayers,4482,Brett Martin,5,1218,Brett Martin,martibr01,828,Brett Harris,harribr02,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4755,Trevor May,5,1248,Trevor May,maytr01,150,Trevor Bauer,bauertr01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,4402,Taijuan Walker,5,2105,Taijuan Walker,walketa01,2107,Jordan Walker,walkejo02,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4554,Steven Brault,5,243,Steven Brault,braulst01,1243,Steven Matz,matzst01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4974,Jose Alvarado,5,58,Jose Alvarado,alvarjo03,59,Jose Alvarez,alvarjo02,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4459,Bryse Wilson,5,2171,Bryse Wilson,wilsobr02,2166,Bobby Wilson,wilsobo02,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,1467,Joe Smith,3,1842,Joe Smith,smithjo05,1852,Josh Smith,smithjo11,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4519,Jorge Alcala,5,32,Jorge Alcala,alcaljo01,40,Jorge Alfaro,alfarjo01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 8 different SbaPlayers,4794,Anthony Banda,5,121,Anthony Banda,bandaan01,176,Anthony Bender,bendean01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,4399,Garrett Richards,5,1645,Garrett Richards,richaga01,439,Garrett Crochet,crochga01,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,5004,Kyle Crick,5,435,Kyle Crick,crickky01,696,Kyle Garlick,garliky01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,1511,Jose Quijada,3,1594,Jose Quijada,quijajo01,1596,Jose Quintana,quintjo01,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,4866,Derek Holland,5,914,Derek Holland,hollade01,915,Greg Holland,hollagr01,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4396,Griffin Canning,5,317,Griffin Canning,cannigr01,408,Griffin Conine,coningr01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,4395,Andrew Heaney,5,843,Andrew Heaney,heanean01,363,Andrew Chafin,chafian01,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,5018,Luis Patino,5,1504,Luis Patino,patinlu01,1240,Luis Matos,matoslu02,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 8 different SbaPlayers,1079,Austin Adams,3,16,Austin Adams,adamsau02,471,Austin Davis,davisau01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,4616,Taylor Hearn,5,844,Taylor Hearn,hearnta01,2116,Taylor Ward,wardta01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4446,Greg Holland,5,915,Greg Holland,hollagr01,914,Derek Holland,hollade01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 8 different SbaPlayers,4532,Brett Anderson,5,66,Brett Anderson,anderbr04,69,Brian Anderson,anderbr06,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,4531,Anthony Bass,5,145,Anthony Bass,bassan01,121,Anthony Banda,bandaan01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4971,Jorge Lopez,5,1144,Jorge Lopez,lopezjo02,1148,Alejo Lopez,lopezal03,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4445,Brady Singer,5,1827,Brady Singer,singebr01,2226,Brad Ziegler,zieglbr01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4637,Logan Allen,5,45,Logan Allen,allenlo01,48,Logan Allen,allenlo02,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 10 different SbaPlayers,4835,Chase Anderson,5,67,Chase Anderson,anderch01,72,Shaun Anderson,andersh01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4478,Matt Andriese,5,76,Matt Andriese,andrima01,131,Matt Barnes,barnema01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4420,Jake Arrieta,5,94,Jake Arrieta,arrieja01,596,Jake Faria,fariaja01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4381,Daniel Bard,5,125,Daniel Bard,bardda01,536,Daniel Duarte,duartda01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4927,Jacob Barnes,5,133,Jacob Barnes,barneja01,991,JaCoby Jones,jonesja07,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,4811,Brandon Bielak,5,195,Brandon Bielak,bielabr01,173,Brandon Belt,beltbr01,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4456,Trevor Cahill,5,304,Trevor Cahill,cahiltr01,1294,Trevor Megill,megiltr01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4305,Carlos Carrasco,5,331,Carlos Carrasco,carraca01,420,Carlos Correa,correca01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,4560,Taylor Clarke,5,384,Taylor Clarke,clarkta01,397,Taylor Cole,coleta01,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4742,Alex Claudio,5,387,Alex Claudio,claudal01,210,Alex Blandino,blandal01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4269,Patrick Corbin,5,416,Patrick Corbin,corbipa01,115,Patrick Bailey,bailepa01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4290,Zach Davies,5,465,Zach Davies,davieza02,472,Noah Davis,davisno01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 7 different SbaPlayers,4801,Austin Davis,5,471,Austin Davis,davisau01,16,Austin Adams,adamsau02,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,1950,Wade Davis,3,468,Wade Davis,daviswa01,474,JD Davis,davisjd01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4836,Chase De Jong,5,478,Chase De Jong,dejonch01,67,Chase Anderson,anderch01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4257,Rafael Dolis,5,523,Rafael Dolis,dolisra01,499,Rafael Devers,deverra01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,2601,Jake Faria,1,596,Jake Faria,fariaja01,94,Jake Arrieta,arrieja01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4643,Buck Farmer,5,597,Buck Farmer,farmebu01,598,Kyle Farmer,farmeky01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4237,Josh Fleming,5,623,Josh Fleming,flemijo01,607,Jose Fermin,fermijo01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,4521,Matt Foster,5,638,Matt Foster,fostema01,610,Matt Festa,festama01,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 7 different SbaPlayers,4322,Bryan Garcia,5,685,Bryan Garcia,garcibr01,689,Rony Garcia,garciro03,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4488,Amir Garrett,5,698,Amir Garrett,garream01,700,Reed Garrett,garrere01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4814,Braxton Garrett,5,701,Braxton Garrett,garrebr01,699,Stone Garrett,garrest01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4999,Kevin Ginkel,5,722,Kevin Ginkel,ginkeke01,1025,Kevin Kelly,kellyke02,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4712,Chi Chi Gonzalez,5,737,Chi Chi Gonzalez,gonzach01,739,Gio Gonzalez,gonzagi01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 7 different SbaPlayers,4405,David Hale,5,805,David Hale,haleda02,457,David Dahl,dahlda01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4291,JA Happ,5,821,JA Happ,happja01,820,Ian Happ,happia01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,5034,Matt Harvey,5,835,Matt Harvey,harvema01,131,Matt Barnes,barnema01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,5103,Ryan Helsley,5,853,Ryan Helsley,helslry01,1584,Ryan Pressly,pressry01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,5137,Tim Hill,5,900,Tim Hill,hillti01,902,Cam Hill,hillca02,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4731,Spencer Howard,5,930,Spencer Howard,howarsp01,924,Spencer Horwitz,horwisp01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4749,Sam Howard,5,929,Sam Howard,howarsa01,903,Sam Hilliard,hillisa01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4952,Joe Jimenez,5,979,Joe Jimenez,jimenjo02,982,Leo Jimenez,jimenle01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 6 different SbaPlayers,4721,Anthony Kay,5,1012,Anthony Kay,kayan01,145,Anthony Bass,bassan01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4199,Brad Keller,5,1016,Brad Keller,kellebr01,1322,Brad Miller,millebr02,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4327,Mitch Keller,5,1017,Mitch Keller,kellemi03,1500,Mitchell Parker,parkemi01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 6 different SbaPlayers,4258,Brandon Kintzler,5,1052,Brandon Kintzler,kintzbr01,1059,Branden Kline,klinebr01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,4703,Michael Lorenzen,5,1151,Michael Lorenzen,lorenmi01,1539,Michael Perez,perezmi03,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,4966,Jordan Lyles,5,1171,Jordan Lyles,lylesjo01,1103,Jordan Leasure,leasujo01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 7 different SbaPlayers,4631,Andrew Miller,5,1320,Andrew Miller,millean01,1703,Andrew Romine,rominan01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,5084,Rafael Montero,5,1352,Rafael Montero,montera01,1465,Rafael Ortega,ortegra01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,4209,David Peterson,5,1548,David Peterson,peterda01,1662,David Robertson,roberda08,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4496,Cody Ponce,5,1573,Cody Ponce,ponceco01,1579,Cody Poteet,poteeco01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,4980,Jose Quintana,5,1596,Jose Quintana,quintjo01,1594,Jose Quijada,quijajo01,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,4227,Tanner Rainey,5,1599,Tanner Rainey,raineta01,122,Tanner Banks,banksta01,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4636,Brooks Raley,5,1601,Brooks Raley,raleybr01,1110,Brooks Lee,leebr02,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,4146,Erasmo Ramirez,5,1604,Erasmo Ramirez,ramirer02,1607,Yefry Ramirez,ramirye01,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 12 different SbaPlayers,4340,Joely Rodriguez,5,1673,Joely Rodriguez,rodrijo06,1677,Jefry Rodriguez,rodrije01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4863,Dennis Santana,5,1762,Dennis Santana,santade01,1760,Danny Santana,santada01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4196,Tanner Scott,5,1788,Tanner Scott,scottta01,1787,Tayler Scott,scottta02,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,4251,Riley Smith,5,1850,Riley Smith,smithri01,1841,Will Smith,smithwi05,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4512,Wander Suero,5,1940,Wander Suero,suerowa01,646,Wander Franco,francwa01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 10 different SbaPlayers,4655,Jose Urena,5,2035,Jose Urena,urenajo01,1973,Jose Tena,tenajo01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4127,Cesar Valdez,5,2046,Cesar Valdez,valdece01,870,Cesar Hernandez,hernace02,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4586,Phillips Valdez,5,2047,Phillips Valdez,valdeph01,589,Phillip Evans,evansph01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4610,Vince Velasquez,5,2065,Vince Velasquez,velasvi01,2067,Andrew Velazquez,velazan01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,4702,Austin Voth,5,2091,Austin Voth,vothau01,427,Austin Cox,coxau01,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,5047,Michael Wacha,5,2093,Michael Wacha,wachami01,371,Michael Chavis,chavimi01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4614,Rowan Wick,5,2147,Rowan Wick,wickro01,2148,Jordan Wicks,wicksjo01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 8 different SbaPlayers,4683,Justin Wilson,5,2167,Justin Wilson,wilsoju10,2162,Justin Williams,williju02,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4678,Dan Winkler,5,2178,Dan Winkler,winklda01,1051,Ian Kinsler,kinslia01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 7 different SbaPlayers,4355,Matt Wisler,5,2183,Matt Wisler,wislema01,167,Matt Belisle,belisma01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 6 different SbaPlayers,4813,Brandon Workman,5,2198,Brandon Workman,workmbr01,249,Brandon Brennan,brennbr01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4345,Ryan Yarbrough,5,2208,Ryan Yarbrough,yarbrry01,8,Bryan Abreu,abreubr01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,4295,Kyle Zimmer,5,2228,Kyle Zimmer,zimmeky01,598,Kyle Farmer,farmeky01,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4705,Tyler Zuber,5,2233,Tyler Zuber,zuberty01,717,Tyler Gilbert,gilbety01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4278,Luis Robert,5,1660,Luis Robert,roberlu01,1467,Luis Ortiz,ortizlu03,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,4460,Tyler ONeill,5,1463,Tyler ONeill,oneilty01,1417,Tyler Nevin,nevinty01,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,4271,Carlos Correa,5,420,Carlos Correa,correca01,331,Carlos Carrasco,carraca01,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4289,Brandon Crawford,5,430,Brandon Crawford,crawfbr01,2198,Brandon Workman,workmbr01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 10 different SbaPlayers,4217,Jose Ramirez,5,1608,Jose Ramirez,ramirjo01,1606,Noe Ramirez,ramirno01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,5056,Mike Zunino,5,2234,Mike Zunino,zuninmi01,1335,Mike Minor,minormi01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4658,Marcus Semien,5,1799,Marcus Semien,semiema01,1928,Marcus Stroman,stromma01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,4264,Kyle Tucker,5,2023,Kyle Tucker,tuckeky01,2022,Cole Tucker,tuckeco01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4287,Bryce Harper,5,823,Bryce Harper,harpebr03,824,Ryne Harper,harpery01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4639,Vladimir Guerrero Jr,5,789,Vladimir Guerrero Jr,guerrvl02,797,Vladimir Gutierrez,gutievl01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4274,Harrison Bader,5,110,Harrison Bader,baderha01,127,Addison Barger,bargead01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,1414,Jake Rogers,3,1692,Jake Rogers,rogerja03,283,Jake Burger,burgeja01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4273,Brandon Nimmo,5,1425,Brandon Nimmo,nimmobr01,1374,Brandon Morrow,morrobr01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,4618,Bryan Reynolds,5,1641,Bryan Reynolds,reynobr01,1639,Mark Reynolds,reynoma01,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 9 different SbaPlayers,4803,Austin Riley,5,1649,Austin Riley,rileyau01,253,Austin Brice,briceau01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4233,Corey Seager,5,1794,Corey Seager,seageco01,1883,Cory Spangenberg,spangco01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4413,Starling Marte,5,1208,Starling Marte,martest01,348,Starlin Castro,castrst01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 9 different SbaPlayers,4168,Tim Anderson,5,73,Tim Anderson,anderti01,74,Ian Anderson,anderia01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4423,Matt Olson,5,1461,Matt Olson,olsonma02,2102,Matt Waldron,waldrma01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,5057,Mitch Garver,5,702,Mitch Garver,garvemi01,1500,Mitchell Parker,parkemi01,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4505,Willson Contreras,5,410,Willson Contreras,contrwi01,411,William Contreras,contrwi02,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 6 different SbaPlayers,4350,Enrique Hernandez,5,871,Enrique Hernandez,hernaen02,867,Felix Hernandez,hernafe02,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,4552,Christian Arroyo,5,96,Christian Arroyo,arroych01,406,Christian Colon,colonch01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4149,Manny Machado,5,1175,Manny Machado,machama01,1176,Andres Machado,machaan02,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 10 different SbaPlayers,4183,Brandon Lowe,5,1156,Brandon Lowe,lowebr01,116,Brandon Bailey,bailebr01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4392,Joey Gallo,5,674,Joey Gallo,gallojo01,321,Joey Cantillo,cantijo01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4715,Jorge Polanco,5,1570,Jorge Polanco,polanjo01,220,Jorge Bonifacio,bonifjo01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4733,Nicky Lopez,5,1149,Nicky Lopez,lopezni01,1143,Jack Lopez,lopezja03,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4225,Willy Adames,5,14,Willy Adames,adamewi01,17,Riley Adams,adamsri03,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4297,Joey Wendle,5,2135,Joey Wendle,wendljo01,2136,Joey Wentz,wentzjo01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,5127,Steven Duggar,5,543,Steven Duggar,duggast01,1881,Steven Souza Jr,souzast01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4876,Dustin Garneau,5,697,Dustin Garneau,garnedu01,703,Justin Garza,garzaju01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4918,Hunter Renfroe,5,1631,Hunter Renfroe,renfrhu01,770,Hunter Greene,greenhu01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 7 different SbaPlayers,4159,Brandon Belt,5,173,Brandon Belt,beltbr01,195,Brandon Bielak,bielabr01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4304,Luis Arraez,5,93,Luis Arraez,arraelu01,138,Luis Barrera,barrelu01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4224,Trevor Story,5,1914,Trevor Story,storytr01,1248,Trevor May,maytr01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4198,George Springer,5,1888,George Springer,springe01,1873,George Soriano,soriage01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4181,Will D Smith,5,1841,Will Smith,smithwi05,1843,Will Smith,smithwi04,0.909,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4352,Ramon Laureano,5,1097,Ramon Laureano,laurera01,2037,Ramon Urias,uriasra01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,1748,Pablo Reyes,3,1637,Pablo Reyes,reyespa01,1635,Alex Reyes,reyesal02,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4771,Kyle Schwarber,5,1784,Kyle Schwarber,schwaky01,598,Kyle Farmer,farmeky01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4148,Freddie Freeman,5,652,Freddie Freeman,freemfr01,651,Mike Freeman,freemmi01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4383,Kolten Wong,5,2188,Kolten Wong,wongko01,2190,Kean Wong,wongke01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4602,Ryan McMahon,5,1286,Ryan McMahon,mcmahry01,1180,Ryan Madson,madsory01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4356,Yan Gomes,5,731,Yan Gomes,gomesya01,728,Ryan Goins,goinsry01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4372,Ty France,5,642,Ty France,francty01,643,JP France,francjp01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 8 different SbaPlayers,4318,Teoscar Hernandez,5,873,Teoscar Hernandez,hernate01,870,Cesar Hernandez,hernace02,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4973,Jose Altuve,5,56,Jose Altuve,altuvjo01,59,Jose Alvarez,alvarjo02,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4553,Ramon Urias,5,2037,Ramon Urias,uriasra01,1716,Ramon Rosso,rossora01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,4528,Danny Jansen,5,969,Danny Jansen,janseda01,130,Danny Barnes,barneda02,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4369,Alex Avila,5,104,Alex Avila,avilaal01,308,Alex Call,callal02,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4603,Adam Frazier,5,648,Adam Frazier,fraziad01,647,Todd Frazier,frazito01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,5011,Lewin Diaz,5,506,Lewin Diaz,diazle01,503,Edwin Diaz,diazed04,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4584,Evan Longoria,5,1140,Evan Longoria,longoev01,628,Estevan Florial,flories01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 7 different SbaPlayers,4248,Justin Turner,5,2029,Justin Turner,turneju01,226,Justin Bour,bourju01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,1766,Rafael Ortega,3,1465,Rafael Ortega,ortegra01,1352,Rafael Montero,montera01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4249,Sean Murphy,5,1390,Sean Murphy,murphse01,1387,Daniel Murphy,murphda08,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 6 different SbaPlayers,4930,Jake Fraley,5,641,Jake Fraley,fraleja01,596,Jake Faria,fariaja01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4885,Elias Diaz,5,502,Elias Diaz,diazel01,509,Alexis Diaz,diazal03,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 6 different SbaPlayers,4524,Francisco Lindor,5,1124,Francisco Lindor,lindofr01,1126,Francisco Liriano,liriafr01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4472,Josh Donaldson,5,526,Josh Donaldson,donaljo02,1404,Josh Naylor,naylojo01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 12 different SbaPlayers,4354,Austin Hays,5,839,Austin Hays,haysau01,16,Austin Adams,adamsau02,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,4894,Francisco Mejia,5,1517,Francisco Pena,penafr01,87,Francisco Arcia,arciafr01,0.828,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,4805,Avisail Garcia,5,678,Avisail Garcia,garciav01,683,Aramis Garcia,garciar01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4941,Jason Castro,5,347,Jason Castro,castrja01,351,Anthony Castro,castran02,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4492,Nick Madrigal,5,1178,Nick Madrigal,madrini01,1230,Nick Martini,martini02,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4982,Josh Bell,5,168,Josh Bell,belljo02,20,Jo Adell,adelljo01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4747,Luis Urias,5,2039,Luis Urias,uriaslu01,658,Luis Frias,friaslu01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4476,Tommy Edman,5,558,Tommy Edman,edmanto01,859,Tommy Henry,henryto01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,5136,Thairo Estrada,5,587,Thairo Estrada,estrath01,586,Marco Estrada,estrama01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4641,Rafael Devers,5,499,Rafael Devers,deverra01,523,Rafael Dolis,dolisra01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4947,Jesus Sanchez,5,1749,Jesus Sanchez,sanchje02,1939,Jesus Sucre,sucreje01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4878,Dylan Carlson,5,327,Dylan Carlson,carlsdy01,355,Dylan Cease,ceasedy01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,1994,Yordan Alvarez,3,61,Yordan Alvarez,alvaryo01,62,Francisco Alvarez,alvarfr01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4690,Aledmys Diaz,5,505,Aledmys Diaz,diazal02,509,Alexis Diaz,diazal03,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4888,Eric Haase,5,801,Eric Haase,haaseer01,926,Eric Hosmer,hosmeer01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4231,Michael Brantley,5,240,Michael Brantley,brantmi02,113,Michel Baez,baezmi01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 13 different SbaPlayers,4239,Brian Anderson,5,69,Brian Anderson,anderbr06,74,Ian Anderson,anderia01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4154,Miguel Rojas,5,1694,Miguel Rojas,rojasmi02,2055,Miguel Vargas,vargami01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 7 different SbaPlayers,4942,JD Martinez,5,1229,JD Martinez,martijd02,1222,Jose Martinez,martijo08,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4132,Tyler Stephenson,5,1905,Tyler Stephenson,stephty01,1904,Robert Stephenson,stephro01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 7 different SbaPlayers,4329,Austin Nola,5,1432,Austin Nola,nolaau01,427,Austin Cox,coxau01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 6 different SbaPlayers,4208,Austin Slater,5,1838,Austin Slater,slateau01,1837,Justin Slaten,slateju01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,1846,Seth Brown,3,265,Seth Brown,brownse01,166,Seth Beer,beerse01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 7 different SbaPlayers,4155,Jose Abreu,5,7,Jose Abreu,abreujo02,1937,Jose Suarez,suarejo01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,1704,Mitch Haniger,3,818,Mitch Haniger,hanigmi01,2143,Mitch White,whitemi03,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4787,Andrew Benintendi,5,177,Andrew Benintendi,beninan01,1065,Andrew Knizner,kniznan01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4202,Chris Taylor,5,1964,Chris Taylor,tayloch03,1739,Chris Sale,salech01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 6 different SbaPlayers,4177,Leury Garcia,5,679,Leury Garcia,garcile02,689,Rony Garcia,garciro03,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,1821,Ryan Zimmerman,3,2229,Ryan Zimmerman,zimmery01,2230,Jordan Zimmermann,zimmejo02,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4547,Garrett Cooper,5,415,Garrett Cooper,coopega03,439,Garrett Crochet,crochga01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4385,Robbie Grossman,5,779,Robbie Grossman,grossro01,1620,Robbie Ray,rayro02,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4260,Nelson Cruz,5,447,Nelson Cruz,cruzne02,449,Oneil Cruz,cruzon01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4457,Max Kepler,5,1031,Max Kepler,keplema01,1314,Max Meyer,meyerma01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4881,Eduardo Escobar,5,581,Eduardo Escobar,escobed01,1738,Eduardo Salazar,salazed01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4361,Mark Canha,5,316,Mark Canha,canhama01,1234,Mark Mathias,mathima01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4403,Wilmer Flores,5,627,Wilmer Flores,florewi01,516,Wilmer Difo,difowi01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,5010,Lane Thomas,5,1978,Lane Thomas,thomala02,1979,Alek Thomas,thomaal01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4772,JD Davis,5,474,JD Davis,davisjd01,468,Wade Davis,daviswa01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4261,Andres Gimenez,5,721,Andres Gimenez,gimenan01,1384,Andres Munoz,munozan01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4508,Josh Harrison,5,829,Josh Harrison,harrijo05,831,Monte Harrison,harrimo01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,1177,Charlie Culberson,3,453,Charlie Culberson,culbech01,1991,Charlie Tilson,tilsoch01,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,1740,Odubel Herrera,3,882,Odubel Herrera,herreod01,883,Rosell Herrera,herrero02,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4197,Alex Verdugo,5,2069,Alex Verdugo,verdual01,591,Alex Faedo,faedoal01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4667,Bradley Zimmer,5,2227,Bradley Zimmer,zimmebr01,2228,Kyle Zimmer,zimmeky01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4333,Kyle Lewis,5,1118,Kyle Lewis,lewisky01,1119,Royce Lewis,lewisro02,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 8 different SbaPlayers,4964,Jonathan Villar,5,2079,Jonathan Villar,villajo01,84,Jonathan Arauz,arauzjo01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,4713,Austin Meadows,5,1290,Austin Meadows,meadoau01,16,Austin Adams,adamsau02,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4786,Amed Rosario,5,1711,Amed Rosario,rosaram01,1710,Eddie Rosario,rosared01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4306,Donovan Solano,5,1868,Donovan Solano,solando01,2113,Donovan Walton,waltodo01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4375,Starlin Castro,5,348,Starlin Castro,castrst01,349,Harold Castro,castrha01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4965,Jordan Luplow,5,1168,Jordan Luplow,luplojo01,917,Jordan Holloway,hollojo01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,4391,Eloy Jimenez,5,980,Eloy Jimenez,jimenel02,982,Leo Jimenez,jimenle01,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4406,Ian Happ,5,820,Ian Happ,happia01,821,JA Happ,happja01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,4348,Jonathan Schoop,5,1779,Jonathan Schoop,schoojo01,318,Jonathan Cannon,cannojo02,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4808,Billy Hamilton,5,810,Billy Hamilton,hamilbi02,811,Ian Hamilton,hamilia01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,4418,Yandy Diaz,5,507,Yandy Diaz,diazya01,511,Yainer Diaz,diazya02,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,4556,Kyle Seager,5,1793,Kyle Seager,seageky01,598,Kyle Farmer,farmeky01,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4483,Adalberto Mondesi,5,1349,Adalberto Mondesi,mondera02,1296,Adalberto Mejia,mejiaad01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,4525,Anthony Rizzo,5,1658,Anthony Rizzo,rizzoan01,351,Anthony Castro,castran02,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,4285,David Fletcher,5,624,David Fletcher,fletcda02,625,Dominic Fletcher,fletcdo01,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,4793,Anthony Alford,5,41,Anthony Alford,alforan01,121,Anthony Banda,bandaan01,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,5021,Luis Torrens,5,2002,Luis Torrens,torrelu01,1240,Luis Matos,matoslu02,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4481,Eddie Rosario,5,1710,Eddie Rosario,rosared01,1711,Amed Rosario,rosaram01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4236,Luis Guillorme,5,792,Luis Guillorme,guilllu01,716,Luis Gil,gillu01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 6 different SbaPlayers,5134,Taylor Ward,5,2116,Taylor Ward,wardta01,844,Taylor Hearn,hearnta01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4745,Sam Hilliard,5,903,Sam Hilliard,hillisa01,929,Sam Howard,howarsa01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,4665,Christian Yelich,5,2212,Christian Yelich,yelicch01,1482,Cristian Pache,pachecr01,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,4167,Dylan Moore,5,1358,Dylan Moore,mooredy01,425,Dylan Covey,coveydy01,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,4590,Jace Peterson,5,1547,Jace Peterson,peterja01,1514,Joc Pederson,pederjo01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,4812,Brandon Drury,5,535,Brandon Drury,drurybr01,2196,Brandon Woodruff,woodrbr01,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 6 different SbaPlayers,4323,Kyle Farmer,5,598,Kyle Farmer,farmeky01,597,Buck Farmer,farmebu01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,4506,Brett Gardner,5,695,Brett Gardner,gardnbr01,66,Brett Anderson,anderbr04,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4949,Jo Adell,5,20,Jo Adell,adelljo01,168,Josh Bell,belljo02,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4462,Pedro Severino,5,1804,Pedro Severino,severpe01,1929,Pedro Strop,stroppe01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 11 different SbaPlayers,4425,Tyler Wade,5,2094,Tyler Wade,wadety01,2125,Tyler Webb,webbty01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,4624,David Peralta,5,1522,David Peralta,peralda01,611,David Festa,festada01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4371,Ryan Jeffers,5,975,Ryan Jeffers,jeffery01,2128,Ryan Weber,weberry01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,4480,Christian Vazquez,5,2063,Christian Vazquez,vazquch01,2078,Christian Villanueva,villach01,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,5117,Sergio Alcantara,5,34,Sergio Alcantara,alcanse01,35,Sandy Alcantara,alcansa01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,5070,Nick Solak,5,1867,Nick Solak,solakni01,1866,Nick Sogard,sogarni01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,5050,Miguel Sano,5,1757,Miguel Sano,sanomi01,1750,Miguel Sanchez,sanchmi01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,5097,Robinson Chirinos,5,373,Robinson Chirinos,chiriro01,319,Robinson Cano,canoro01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4331,Eric Hosmer,5,926,Eric Hosmer,hosmeer01,801,Eric Haase,haaseer01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 17 different SbaPlayers,4349,Austin Barnes,5,132,Austin Barnes,barneau01,253,Austin Brice,briceau01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,5153,Tyler Naquin,5,1399,Tyler Naquin,naquity01,103,Tyler Austin,austity01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,4594,Charlie Blackmon,5,205,Charlie Blackmon,blackch02,134,Charlie Barnes,barnech01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4201,Michael Conforto,5,407,Michael Conforto,confomi01,1875,Michael Soroka,sorokmi01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4309,Nick Ahmed,5,26,Nick Ahmed,ahmedni01,1605,Nick Ramirez,ramirni01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,4988,Josh Rojas,5,1695,Josh Rojas,rojasjo01,1696,Jose Rojas,rojasjo02,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4899,Garrett Hampson,5,814,Garrett Hampson,hampsga01,1645,Garrett Richards,richaga01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4880,Eddy Alvarez,5,60,Eddy Alvarez,alvared01,59,Jose Alvarez,alvarjo02,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,5016,Luis V Garcia,5,694,Luis Garcia Jr,garcilu04,690,Adolis Garcia,garciad02,0.815,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,1991,Yonathan Daza,3,476,Yonathan Daza,dazayo01,84,Jonathan Arauz,arauzjo01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,4984,Josh Naylor,5,1404,Josh Naylor,naylojo01,1967,Josh Taylor,taylojo02,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4739,Asdrubal Cabrera,5,299,Asdrubal Cabrera,cabreas01,303,Oswaldo Cabrera,cabreos01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,1514,Jose Rondon,3,1707,Jose Rondon,rondojo02,1450,Joseph Odom,odomjo01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 8 different SbaPlayers,4619,Christian Walker,5,2104,Christian Walker,walkech02,971,Cristian Javier,javiecr01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,4453,Brad Miller,5,1322,Brad Miller,millebr02,1016,Brad Keller,kellebr01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,5006,Kyle Garlick,5,696,Kyle Garlick,garliky01,435,Kyle Crick,crickky01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,5132,Taylor Jones,5,992,Taylor Jones,jonesta01,1689,Taylor Rogers,rogerta01,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,5000,Kevin Newman,5,1420,Kevin Newman,newmake01,706,Kevin Gausman,gausmke01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4740,Corey Dickerson,5,513,Corey Dickerson,dickeco01,512,Alex Dickerson,dickeal01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 13 different SbaPlayers,4342,Cesar Hernandez,5,870,Cesar Hernandez,hernace02,880,Carlos Hernandez,hernaca04,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4647,Victor Reyes,5,1638,Victor Reyes,reyesvi01,1666,Victor Robles,roblevi01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 6 different SbaPlayers,4191,Anthony Santander,5,1764,Anthony Santander,santaan02,176,Anthony Bender,bendean01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4128,Andrew Stevenson,5,1906,Andrew Stevenson,stevean01,1907,Cal Stevenson,steveca01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4365,Bobby Dalbec,5,458,Bobby Dalbec,dalbebo01,237,Bobby Bradley,bradlbo01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 11 different SbaPlayers,5164,Yadiel Hernandez,5,875,Yadiel Hernandez,hernaya01,867,Felix Hernandez,hernafe02,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,4555,Jose Trevino,5,2013,Jose Trevino,trevijo01,1973,Jose Tena,tenajo01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,1360,Harold Ramirez,3,1609,Harold Ramirez,ramirha02,1611,Yohan Ramirez,ramiryo01,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4792,Andy Young,5,2220,Andy Young,youngan02,2218,Danny Young,youngda02,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 7 different SbaPlayers,4804,Austin Romine,5,1704,Austin Romine,rominau01,253,Austin Brice,briceau01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,5069,Nick Senzel,5,1802,Nick Senzel,senzeni01,1410,Nick Nelson,nelsoni01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4561,Willi Castro,5,352,Willi Castro,castrwi01,350,Miguel Castro,castrmi01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,1535,Juan Lagares,3,1083,Juan Lagares,lagarju01,24,Julian Aguiar,aguiaju01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4969,Jorge Alfaro,5,40,Jorge Alfaro,alfarjo01,32,Jorge Alcala,alcaljo01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,5002,Khris Davis,5,469,Khris Davis,daviskh01,467,Chris Davis,davisch02,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4244,Jose Iglesias,5,949,Jose Iglesias,iglesjo01,950,Raisel Iglesias,iglesra01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4687,Jorge Soler,5,1870,Jorge Soler,solerjo01,1144,Jorge Lopez,lopezjo02,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,5155,Victor Caratini,5,325,Victor Caratini,caratvi01,83,Victor Arano,aranovi01,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,5162,Willie Calhoun,5,307,Willie Calhoun,calhowi01,306,Kole Calhoun,calhoko01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 9 different SbaPlayers,4736,Marwin Gonzalez,5,741,Marwin Gonzalez,gonzama01,738,Adrian Gonzalez,gonzaad01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 10 different SbaPlayers,4767,Erik Gonzalez,5,742,Erik Gonzalez,gonzaer01,739,Gio Gonzalez,gonzagi01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 8 different SbaPlayers,5043,Michael Chavis,5,371,Michael Chavis,chavimi01,827,Michael Harris,harrimi04,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4501,Maikel Franco,5,645,Maikel Franco,francma02,651,Mike Freeman,freemmi01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,1553,Kelvin Gutierrez,3,796,Kelvin Gutierrez,gutieke01,881,Kelvin Herrera,herreke01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,5123,Stephen Piscotty,5,1563,Stephen Piscotty,piscost01,2086,Stephen Vogt,vogtst01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4950,Joc Pederson,5,1514,Joc Pederson,pederjo01,1547,Jace Peterson,peterja01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4161,James McCann,5,1261,James McCann,mccanja02,1477,James Outman,outmaja01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,1782,Richie Martin,3,1216,Richie Martin,martiri01,1214,Chris Martin,martich02,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4730,Orlando Arcia,5,86,Orlando Arcia,arciaor01,685,Bryan Garcia,garcibr01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,4979,Jose Peraza,5,1527,Jose Peraza,perazjo01,1528,Oswald Peraza,perazos02,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4587,Aaron Hicks,5,892,Aaron Hicks,hicksaa01,893,John Hicks,hicksjo02,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 6 different SbaPlayers,4995,Justin Upton,5,2034,Justin Upton,uptonju01,546,Justin Dunn,dunnju01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4499,Pavin Smith,5,1851,Pavin Smith,smithpa04,1854,Kevin Smith,smithke05,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4653,Phillip Evans,5,589,Phillip Evans,evansph01,2047,Phillips Valdez,valdeph01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4564,Carlos Santana,5,1759,Carlos Santana,santaca01,1763,Edgar Santana,santaed01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,5073,Niko Goodrum,5,748,Niko Goodrum,goodrni01,750,Nick Goody,goodyni01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4681,Roberto Perez,5,1538,Roberto Perez,perezro02,1938,Robert Suarez,suarero01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,1972,Wilmer Difo,3,516,Wilmer Difo,difowi01,634,Wilmer Font,fontwi01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,1093,Austin Wynns,3,2202,Austin Wynns,wynnsau01,839,Austin Hays,haysau01,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4758,David Bote,5,224,David Bote,boteda01,162,David Bednar,bednada01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,5120,Shed Long,5,1138,Shed Long,longsh01,1139,Sam Long,longsa01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,5048,Miguel Andujar,5,78,Miguel Andujar,andujmi01,1757,Miguel Sano,sanomi01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,1405,Jake Bauers,3,151,Jake Bauers,bauerja01,283,Jake Burger,burgeja01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,5049,Miguel Cabrera,5,298,Miguel Cabrera,cabremi01,300,Melky Cabrera,cabreme01,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4443,Martin Maldonado,5,1187,Martin Maldonado,maldoma01,1582,Martin Prado,pradoma01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4931,Jake Lamb,5,1087,Jake Lamb,lambja01,57,Jake Alu,aluja01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,4438,Harold Castro,5,349,Harold Castro,castrha01,348,Starlin Castro,castrst01,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,4539,Andrew Velazquez,5,2067,Andrew Velazquez,velazan01,2059,Andrew Vasquez,vasquan02,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4890,Eric Sogard,5,1865,Eric Sogard,sogarer01,1866,Nick Sogard,sogarni01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 6 different SbaPlayers,4232,Anthony Rendon,5,1630,Anthony Rendon,rendoan01,176,Anthony Bender,bendean01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,5125,Stephen Vogt,5,2086,Stephen Vogt,vogtst01,1430,Stephen Nogosek,nogosst01,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 6 different SbaPlayers,4802,Austin Hedges,5,848,Austin Hedges,hedgeau01,839,Austin Hays,haysau01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4638,Carter Kieboom,5,1038,Carter Kieboom,kieboca01,1037,Spencer Kieboom,kiebosp01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 7 different SbaPlayers,4963,Jonathan Arauz,5,84,Jonathan Arauz,arauzjo01,82,Jonathan Aranda,arandjo01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4422,Kole Calhoun,5,306,Kole Calhoun,calhoko01,307,Willie Calhoun,calhowi01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4382,DJ Stewart,5,1909,DJ Stewart,stewadj01,1911,Kohl Stewart,stewako01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4186,Clint Frazier,5,649,Clint Frazier,frazicl01,647,Todd Frazier,frazito01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,5156,Victor Robles,5,1666,Victor Robles,roblevi01,1638,Victor Reyes,reyesvi01,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,2045,Alex Blandino,1,210,Alex Blandino,blandal01,387,Alex Claudio,claudal01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,4613,Colin Moran,5,1360,Colin Moran,moranco01,1621,Colin Rea,reaco01,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,4907,Gregory Polanco,5,1569,Gregory Polanco,polangr01,207,Gregor Blanco,blancgr01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,4923,Isan Diaz,5,508,Isan Diaz,diazis01,502,Elias Diaz,diazel01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4575,Rio Ruiz,5,1723,Rio Ruiz,ruizri01,1724,Jose Ruiz,ruizjo01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4206,Jackie Bradley Jr,5,239,Jackie Bradley Jr,bradlja02,236,Archie Bradley,bradlar01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4855,Daniel Vogelbach,5,2085,Daniel Vogelbach,vogelda01,1172,Daniel Lynch,lynchda02,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 6 different SbaPlayers,4856,Danny Santana,5,1760,Danny Santana,santada01,1762,Dennis Santana,santade01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,4484,Alex Dickerson,5,512,Alex Dickerson,dickeal01,961,Alex Jackson,jacksal02,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4884,Eli White,5,2140,Eli White,whiteel04,2142,Evan White,whiteev01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 13 different SbaPlayers,5046,Michael Perez,5,1539,Michael Perez,perezmi03,1546,Michael Petersen,petermi01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4854,Daniel Robertson,5,1663,Daniel Robertson,roberda10,1662,David Robertson,roberda08,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4768,Evan White,5,2142,Evan White,whiteev01,2144,Brendan White,whitebr01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4843,Cole Tucker,5,2022,Cole Tucker,tuckeco01,2023,Kyle Tucker,tuckeky01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,4858,David Dahl,5,457,David Dahl,dahlda01,805,David Hale,haleda02,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,5079,Pablo Sandoval,5,1753,Pablo Sandoval,sandopa01,1754,Patrick Sandoval,sandopa02,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 9 different SbaPlayers,4158,Jonathan Davis,5,470,Jonathan Davis,davisjo05,953,Jonathan India,indiajo01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4279,Kevan Smith,5,1847,Kevan Smith,smithke04,1854,Kevin Smith,smithke05,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,2063,Andrew Romine,1,1703,Andrew Romine,rominan01,1320,Andrew Miller,millean01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,5055,Mike Tauchman,5,1961,Mike Tauchman,tauchmi01,152,Mike Baumann,baumami01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4593,Jake Cave,5,354,Jake Cave,caveja01,1274,Jake McGee,mcgeeja01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 8 different SbaPlayers,1788,Robel Garcia,3,682,Robel Garcia,garciro02,692,Robert Garcia,garciro04,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4953,Joe Panik,5,1493,Joe Panik,panikjo01,1732,Joe Ryan,ryanjo04,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4439,JaCoby Jones,5,991,JaCoby Jones,jonesja07,133,Jacob Barnes,barneja01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4761,Matt Carpenter,5,329,Matt Carpenter,carpema01,328,Ryan Carpenter,carpery01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,4789,Andrew Knizner,5,1065,Andrew Knizner,kniznan01,1320,Andrew Miller,millean01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,5051,Mike Ford,5,635,Mike Ford,fordmi01,615,Mike Fiers,fiersmi01,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,1871,Stevie Wilkerson,3,2153,Stevie Wilkerson,wilkest01,2169,Steven Wilson,wilsost02,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4283,Andrew Knapp,5,1062,Andrew Knapp,knappan01,1400,Andrew Nardi,nardian01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4780,Adrian Morejon,5,1363,Adrian Morejon,morejad01,1362,Brian Moran,moranbr01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,4760,Anibal Sanchez,5,1743,Anibal Sanchez,sanchan01,1747,Ali Sanchez,sanchal04,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,1088,Austin Pruitt,3,1588,Austin Pruitt,pruitau01,253,Austin Brice,briceau01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4677,Caleb Ferguson,5,605,Caleb Ferguson,ferguca01,604,Tyler Ferguson,ferguty01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,1184,Chris Archer,3,85,Chris Archer,archech01,1739,Chris Sale,salech01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4621,Cionel Perez,5,1540,Cionel Perez,perezci01,1539,Michael Perez,perezmi03,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4477,Dakota Hudson,5,934,Dakota Hudson,hudsoda02,108,Dakota Bacus,bacusda01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4330,Daniel Castano,5,337,Daniel Castano,castada01,492,Daniel Descalso,descada01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 6 different SbaPlayers,4694,David Phelps,5,1554,David Phelps,phelpda01,889,David Hess,hessda01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,2222,David Robertson,1,1662,David Robertson,roberda08,1663,Daniel Robertson,roberda10,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4860,Dee Strange Gordon,5,1920,Dee Strange Gordon,gordode01,753,Tanner Gordon,gordota01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4284,Dustin May,5,1249,Dustin May,maydu01,839,Austin Hays,haysau01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4601,Greg Allen,5,44,Greg Allen,allengr01,915,Greg Holland,hollagr01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4912,Hoby Milner,5,1332,Hoby Milner,milneho01,1326,Bobby Miller,millebo06,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,4718,Jason Adam,5,13,Jason Adam,adamja01,16,Austin Adams,adamsau02,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4566,Jimmy Herget,5,863,Jimmy Herget,hergeji01,1089,Jimmy Lambert,lambeji01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4625,Joey Bart,5,142,Joey Bart,bartjo01,129,Joe Barlow,barlojo01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 6 different SbaPlayers,4513,Jonathan Hernandez,5,876,Jonathan Hernandez,hernajo02,82,Jonathan Aranda,arandjo01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,1490,Jordan Hicks,3,894,Jordan Hicks,hicksjo03,2148,Jordan Wicks,wicksjo01,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,4558,Jordan Weems,5,2129,Jordan Weems,weemsjo01,1171,Jordan Lyles,lylesjo01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,3862,Josh Smith,4,1852,Josh Smith,smithjo11,1842,Joe Smith,smithjo05,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,1550,Justin Verlander,3,2071,Justin Verlander,verlaju01,70,Justin Anderson,anderju01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4671,Kyle Wright,5,2200,Kyle Wright,wrighky01,2199,Mike Wright,wrighmi01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,1616,Luke Maile,3,1185,Luke Maile,mailelu01,1602,Luke Raley,raleylu01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,1623,Manny Banuelos,3,123,Manny Banuelos,banuema01,130,Danny Barnes,barneda02,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,5027,Mark Mathias,5,1234,Mark Mathias,mathima01,316,Mark Canha,canhama01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,4469,Matt Strahm,5,1918,Matt Strahm,strahma01,241,Matt Brash,brashma01,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,5067,Nick Nelson,5,1410,Nick Nelson,nelsoni01,71,Nick Anderson,anderni01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4407,Robinson Cano,5,319,Robinson Cano,canoro01,373,Robinson Chirinos,chiriro01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 10 different SbaPlayers,5099,Rony Garcia,5,689,Rony Garcia,garciro03,693,Rico Garcia,garciri01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4386,Ryan Borucki,5,222,Ryan Borucki,borucry01,244,Ryan Braun,braunry02,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 6 different SbaPlayers,4581,Ryan Brasier,5,242,Ryan Brasier,brasiry01,117,Bryan Baker,bakerbr01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,2954,Seranthony Dominguez,1,524,Seranthony Dominguez,dominse01,525,Jasson Dominguez,dominja01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,1927,Tyler Beede,3,164,Tyler Beede,beedety01,2094,Tyler Wade,wadety01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,4669,Tyler Heineman,5,851,Tyler Heineman,heinety01,654,Tyler Freeman,freemty01,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,3023,Victor Arano,1,83,Victor Arano,aranovi01,325,Victor Caratini,caratvi01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,1138,Brock Stewart,3,1908,Brock Stewart,stewabr01,1911,Kohl Stewart,stewako01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4844,Colin Rea,5,1621,Colin Rea,reaco01,1360,Colin Moran,moranco01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,1263,Derek Law,3,1098,Derek Law,lawde01,899,Derek Hill,hillde01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4937,James Paxton,5,1506,James Paxton,paxtoja01,1509,James Pazos,pazosja01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,2804,Matt Koch,1,1066,Matt Koch,kochma01,1835,Matt Skole,skolema01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,5062,Nate Pearson,5,1513,Nate Pearson,pearsna01,557,Nate Eaton,eatonna01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 11 different SbaPlayers,4164,Nick Anderson,5,71,Nick Anderson,anderni01,1410,Nick Nelson,nelsoni01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 6 different SbaPlayers,5068,Nick Ramirez,5,1605,Nick Ramirez,ramirni01,1603,Neil Ramirez,ramirne01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4620,Scott Alexander,5,36,Scott Alexander,alexasc02,38,Jason Alexander,alexaja01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,1854,Shelby Miller,3,1323,Shelby Miller,millesh01,1332,Hoby Milner,milneho01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,1897,Tommy Kahnle,3,1006,Tommy Kahnle,kahnlto01,1398,Tommy Nance,nanceto01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,1187,Chris Devenski,3,498,Chris Devenski,devench02,467,Chris Davis,davisch02,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,1432,Jay Jackson,3,959,Jay Jackson,jacksja01,961,Alex Jackson,jacksal02,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4467,Carson Fulmer,5,667,Carson Fulmer,fulmeca01,279,Aaron Bummer,bummeaa01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 12 different SbaPlayers,1544,Justin Anderson,3,70,Justin Anderson,anderju01,73,Tim Anderson,anderti01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,1646,Matt Bowman,3,228,Matt Bowman,bowmama01,131,Matt Barnes,barnema01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 10 different SbaPlayers,1724,Nick Martini,3,1230,Nick Martini,martini02,1224,Nick Martinez,martini01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4170,Sixto Sanchez,5,1751,Sixto Sanchez,sanchsi01,1747,Ali Sanchez,sanchal04,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4347,Yonny Chirinos,5,374,Yonny Chirinos,chiriyo01,373,Robinson Chirinos,chiriro01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,1010,Aaron Altherr,3,55,Aaron Altherr,altheaa01,383,Aaron Civale,civalaa01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,1022,Adam Conley,3,409,Adam Conley,conlead01,989,Adam Jones,jonesad01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,1028,Adam Jones,3,989,Adam Jones,jonesad01,409,Adam Conley,conlead01,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4388,Adam Kolarek,5,1069,Adam Kolarek,kolarad01,1459,Adam Oller,ollerad01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,1034,Adam Warren,3,2118,Adam Warren,warread01,2119,Art Warren,warrear01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,2034,Addison Reed,1,1624,Addison Reed,reedad01,127,Addison Barger,bargead01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,1035,Addison Russell,3,1728,Addison Russell,russead02,1624,Addison Reed,reedad01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 8 different SbaPlayers,2038,Adrian Gonzalez,1,738,Adrian Gonzalez,gonzaad01,741,Marwin Gonzalez,gonzama01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4781,Albert Almora,5,51,Albert Almora Jr,almoral01,63,Adbert Alzolay,alzolad01,0.897,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4764,Alex Gordon,5,751,Alex Gordon,gordoal01,753,Tanner Gordon,gordota01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,2051,Alex Wilson,1,2168,Alex Wilson,wilsoal01,512,Alex Dickerson,dickeal01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 6 different SbaPlayers,1057,Andrew Cashner,3,336,Andrew Cashner,cashnan01,363,Andrew Chafin,chafian01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,4442,Andrew Suarez,5,1935,Andrew Suarez,suarean01,2059,Andrew Vasquez,vasquan02,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,1071,Anthony Swarzak,3,1950,Anthony Swarzak,swarzan01,121,Anthony Banda,bandaan01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 7 different SbaPlayers,2080,Austin Jackson,1,958,Austin Jackson,jacksau01,427,Austin Cox,coxau01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,2096,Bobby Wilson,1,2166,Bobby Wilson,wilsobo02,2171,Bryse Wilson,wilsobr02,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,1110,Brad Peacock,3,1510,Brad Peacock,peacobr01,1511,Matt Peacock,peacoma01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,2102,Brad Ziegler,1,2226,Brad Ziegler,zieglbr01,1016,Brad Keller,kellebr01,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,1116,Brandon Dixon,3,520,Brandon Dixon,dixonbr01,1425,Brandon Nimmo,nimmobr01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 7 different SbaPlayers,2106,Brandon Guyer,1,798,Brandon Guyer,guyerbr01,1246,Brandon Maurer,maurebr01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 9 different SbaPlayers,2108,Brandon Maurer,1,1246,Brandon Maurer,maurebr01,798,Brandon Guyer,guyerbr01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,2109,Brandon McCarthy,1,1263,Brandon McCarthy,mccarbr01,1205,Brandon Marsh,marshbr02,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 6 different SbaPlayers,2110,Brandon Morrow,1,1374,Brandon Morrow,morrobr01,1246,Brandon Maurer,maurebr01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 6 different SbaPlayers,1134,Brian Johnson,3,986,Brian Johnson,johnsbr02,987,Bryce Johnson,johnsbr03,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,1135,Brian McCann,3,1260,Brian McCann,mccanbr01,1362,Brian Moran,moranbr01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4821,Bryan Holaday,5,911,Bryan Holaday,holadbr01,1427,Ryan Noda,nodary01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,2124,Bryan Mitchell,1,1339,Bryan Mitchell,mitchbr01,1341,Calvin Mitchell,mitchca01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,2132,Caleb Joseph,1,996,Caleb Joseph,josepca01,997,Corban Joseph,josepco01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,1158,Carlos Gomez,3,732,Carlos Gomez,gomezca01,740,Carlos Gonzalez,gonzaca01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 12 different SbaPlayers,1159,Carlos Gonzalez,3,740,Carlos Gonzalez,gonzaca01,744,Oscar Gonzalez,gonzaos01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,1179,Charlie Tilson,3,1991,Charlie Tilson,tilsoch01,1375,Charlie Morton,mortoch02,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,2160,Chasen Bradford,1,234,Chasen Bradford,bradfch02,233,Cody Bradford,bradfco01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 7 different SbaPlayers,4837,Chris Davis,5,467,Chris Davis,davisch02,469,Khris Davis,daviskh01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,2169,Chris Rusin,1,1727,Chris Rusin,rusinch01,1214,Chris Martin,martich02,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,2175,Christian Villanueva,1,2078,Christian Villanueva,villach01,2063,Christian Vazquez,vazquch01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,1203,Clayton Richard,3,1644,Clayton Richard,richacl01,1034,Clayton Kershaw,kershcl01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4841,Cody Reed,5,1625,Cody Reed,reedco01,1860,Cy Sneed,sneedcy01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,1220,Cory Spangenberg,3,1883,Cory Spangenberg,spangco01,1794,Corey Seager,seageco01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,2197,Dan Jennings,1,977,Dan Jennings,jennida01,548,Dane Dunning,dunnida01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,1229,Daniel Descalso,3,492,Daniel Descalso,descada01,337,Daniel Castano,castada01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4852,Daniel Murphy,5,1387,Daniel Murphy,murphda08,1390,Sean Murphy,murphse01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,1234,Daniel Palka,3,1491,Daniel Palka,palkada01,1490,Daniel Palencia,palenda01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,2208,Danny Barnes,1,130,Danny Barnes,barneda02,123,Manny Banuelos,banuema01,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,2211,Danny Valencia,1,2050,Danny Valencia,valenda01,1490,Daniel Palencia,palenda01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,1248,David Freese,3,655,David Freese,freesda01,656,David Freitas,freitda01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,2217,David Freitas,1,656,David Freitas,freitda01,611,David Festa,festada01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 8 different SbaPlayers,1250,David Hernandez,3,868,David Hernandez,hernada01,875,Yadiel Hernandez,hernaya01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 6 different SbaPlayers,1251,David Hess,3,889,David Hess,hessda01,1554,David Phelps,phelpda01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 11 different SbaPlayers,1259,Dereck Rodriguez,3,1676,Dereck Rodriguez,rodride01,1677,Jefry Rodriguez,rodrije01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,4869,Domingo Santana,5,1761,Domingo Santana,santado01,1956,Domingo Tapia,tapiado01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,4879,Dylan Covey,5,425,Dylan Covey,coveydy01,401,Dylan Coleman,colemdy01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,1291,Eduardo Nunez,3,1442,Eduardo Nunez,nunezed02,1675,Eduardo Rodriguez,rodried05,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,2256,Edubray Ramos,1,1613,Edubray Ramos,ramosed02,1614,Henry Ramos,ramoshe01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4883,Edwin Encarnacion,5,571,Edwin Encarnacion,encared01,572,Jerar Encarnacion,encarje01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,1295,Edwin Jackson,3,957,Edwin Jackson,jacksed01,958,Austin Jackson,jacksau01,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,2519,Eric Skoglund,1,1834,Eric Skoglund,skogler01,1865,Eric Sogard,sogarer01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4891,Eric Thames,5,1976,Eric Thames,thameer01,801,Eric Haase,haaseer01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 9 different SbaPlayers,1317,Felix Hernandez,3,867,Felix Hernandez,hernafe02,874,Elieser Hernandez,hernael01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4542,Felix Pena,5,1518,Felix Pena,penafe01,867,Felix Hernandez,hernafe02,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,1319,Fernando Rodney,3,1669,Fernando Rodney,rodnefe01,1701,Fernando Romero,romerfe01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,2532,Fernando Romero,1,1701,Fernando Romero,romerfe01,1669,Fernando Rodney,rodnefe01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 9 different SbaPlayers,2533,Francisco Arcia,1,87,Francisco Arcia,arciafr01,1126,Francisco Liriano,liriafr01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4169,Francisco Cervelli,5,359,Francisco Cervelli,cervefr01,87,Francisco Arcia,arciafr01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,1324,Francisco Liriano,3,1126,Francisco Liriano,liriafr01,87,Francisco Arcia,arciafr01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,2537,Francisco Pena,1,1517,Francisco Pena,penafr01,87,Francisco Arcia,arciafr01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,2542,Gabriel Moya,1,1379,Gabriel Moya,moyaga01,2214,Gabriel Ynoa,ynoaga01,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 11 different SbaPlayers,4902,Gio Gonzalez,5,739,Gio Gonzalez,gonzagi01,743,Victor Gonzalez,gonzavi02,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 8 different SbaPlayers,2552,Gorkys Hernandez,1,869,Gorkys Hernandez,hernago01,879,Jose Hernandez,hernajo03,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 6 different SbaPlayers,4906,Greg Garcia,5,681,Greg Garcia,garcigr01,682,Robel Garcia,garciro02,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,2557,Gregor Blanco,1,207,Gregor Blanco,blancgr01,1569,Gregory Polanco,polangr01,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,1367,Hector Velazquez,3,2066,Hector Velazquez,velazhe01,2068,Nelson Velazquez,velazne01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,1368,Hernan Perez,3,1536,Hernan Perez,perezhe01,1542,Eury Perez,perezeu02,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4917,Hunter Pence,5,1520,Hunter Pence,pencehu01,770,Hunter Greene,greenhu01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,1375,Hunter Wood,3,2192,Hunter Wood,woodhu01,747,Hunter Goodman,goodmhu01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,1377,Ian Desmond,3,495,Ian Desmond,desmoia01,74,Ian Anderson,anderia01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,1380,Ian Kinsler,3,1051,Ian Kinsler,kinslia01,2178,Dan Winkler,winklda01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4743,Jace Fry,5,661,Jace Fry,fryja01,641,Jake Fraley,fraleja01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,2595,Jacob Rhame,1,1642,Jacob Rhame,rhameja01,65,Jacob Amaya,amayaja01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,2611,James Pazos,1,1509,James Pazos,pazosja01,1506,James Paxton,paxtoja01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4938,Jared Hughes,5,937,Jared Hughes,hugheja02,1821,Jared Shuster,shustja01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,2618,Jason Hammel,1,813,Jason Hammel,hammeja01,13,Jason Adam,adamja01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,1428,Jason Vargas,3,2053,Jason Vargas,vargaja01,13,Jason Adam,adamja01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4588,Javy Guerra,5,784,Javy Guerra,guerrja02,786,Javy Guerra,guerrja01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 15 different SbaPlayers,1441,Jefry Rodriguez,3,1677,Jefry Rodriguez,rodrije01,1673,Joely Rodriguez,rodrijo06,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,1452,Jesus Sucre,3,1939,Jesus Sucre,sucreje01,1749,Jesus Sanchez,sanchje02,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,2648,Jim Johnson,1,984,Jim Johnson,johnsji04,986,Brian Johnson,johnsbr02,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,1476,John Hicks,3,893,John Hicks,hicksjo02,894,Jordan Hicks,hicksjo03,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,2668,Johnny Field,1,613,Johnny Field,fieldjo04,614,Josh Fields,fieldjo03,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4961,Jon Jay,5,973,Jon Jay,jayjo02,766,Jon Gray,grayjo02,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,4724,Jonathan Holder,5,912,Jonathan Holder,holdejo02,1779,Jonathan Schoop,schoojo01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,1487,Jonathan Lucroy,3,1163,Jonathan Lucroy,lucrojo01,318,Jonathan Cannon,cannojo02,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,1494,Jordan Zimmermann,3,2230,Jordan Zimmermann,zimmejo02,2229,Ryan Zimmerman,zimmery01,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4970,Jorge Bonifacio,5,220,Jorge Bonifacio,bonifjo01,1570,Jorge Polanco,polanjo01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,2687,Jose Bautista,1,153,Jose Bautista,bautijo02,293,Jose Butto,buttojo01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 7 different SbaPlayers,2689,Jose Briceno,1,254,Jose Briceno,bricejo01,139,Jose Barrero,garcijo02,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 8 different SbaPlayers,2690,Jose Castillo,1,342,Jose Castillo,castijo02,321,Joey Cantillo,cantijo01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 12 different SbaPlayers,4977,Jose Martinez,5,1222,Jose Martinez,martijo08,1226,Seth Martinez,martise01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,4978,Jose Osuna,5,1471,Jose Osuna,osunajo01,2035,Jose Urena,urenajo01,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,2696,Jose Pirela,1,1562,Jose Pirela,pireljo01,2035,Jose Urena,urenajo01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,2702,Josh Fields,1,614,Josh Fields,fieldjo03,613,Johnny Field,fieldjo04,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,1545,Justin Bour,3,226,Justin Bour,bourju01,271,Justin Bruihl,bruihju01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 7 different SbaPlayers,2717,Justin Miller,1,1321,Justin Miller,milleju02,47,Austin Allen,allenau01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 6 different SbaPlayers,4994,Justin Smoak,5,1857,Justin Smoak,smoakju01,1999,Justin Topa,topaju01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,1567,Kevin McCarthy,3,1264,Kevin McCarthy,mccarke01,1265,Jake McCarthy,mccarja02,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,2739,Kohl Stewart,1,1911,Kohl Stewart,stewako01,1909,DJ Stewart,stewadj01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,1591,Leonys Martin,3,1215,Leonys Martin,martile01,1217,Jason Martin,martija03,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,5019,Luis Perdomo,5,1529,Luis Perdomo,perdolu02,1530,Angel Perdomo,perdoan01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,5025,Mallex Smith,5,1846,Mallex Smith,smithma05,1845,Caleb Smith,smithca03,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,2780,Marco Estrada,1,586,Marco Estrada,estrama01,587,Thairo Estrada,estrath01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,1635,Mark Reynolds,3,1639,Mark Reynolds,reynoma01,1640,Matt Reynolds,reynoma03,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,1638,Martin Prado,3,1582,Martin Prado,pradoma01,1535,Martin Perez,perezma02,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 9 different SbaPlayers,5029,Mason Williams,5,2154,Mason Williams,willima10,2160,Gavin Williams,williga01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,5030,Matt Adams,5,15,Matt Adams,adamsma01,16,Austin Adams,adamsau02,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,2796,Matt Belisle,1,167,Matt Belisle,belisma01,2183,Matt Wisler,wislema01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,5032,Matt Davidson,5,463,Matt Davidson,davidma02,464,Tucker Davidson,davidtu01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4753,Matt Kemp,5,1026,Matt Kemp,kempma01,1835,Matt Skole,skolema01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,5035,Matt Magill,5,1182,Matt Magill,magilma01,806,Matt Hall,hallma02,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,5037,Matt Wieters,5,2152,Matt Wieters,wietema01,2183,Matt Wisler,wislema01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,5038,Matthew Boyd,5,230,Matthew Boyd,boydma01,999,Matthew Joyce,joycema01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,5039,Matthew Joyce,5,999,Matthew Joyce,joycema01,230,Matthew Boyd,boydma01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,1670,Melky Cabrera,3,300,Melky Cabrera,cabreme01,298,Miguel Cabrera,cabremi01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 7 different SbaPlayers,1676,Michael Feliz,3,602,Michael Feliz,felizmi01,1022,Michael Kelly,kellymi03,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4598,Mike Fiers,5,615,Mike Fiers,fiersmi01,1251,Mike Mayers,mayermi01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,1699,Mike Wright,3,2199,Mike Wright,wrighmi01,2200,Kyle Wright,wrighky01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,5061,Nate Jones,5,990,Nate Jones,jonesna01,994,Nolan Jones,jonesno01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 7 different SbaPlayers,2850,Neil Ramirez,1,1603,Neil Ramirez,ramirne01,1606,Noe Ramirez,ramirno01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,5063,Neil Walker,5,2103,Neil Walker,walkene01,2106,Ryan Walker,walkery01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,1720,Nick Hundley,3,940,Nick Hundley,hundlni01,2027,Nik Turley,turleni01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,5065,Nick Markakis,5,1201,Nick Markakis,markani01,1292,Nick Mears,mearsni01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 8 different SbaPlayers,1730,Nick Williams,3,2157,Nick Williams,willini01,2161,Alika Williams,willial04,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,5076,Oliver Drake,5,534,Oliver Drake,drakeol01,1533,Oliver Perez,perezol01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4430,Oliver Perez,5,1533,Oliver Perez,perezol01,1542,Eury Perez,perezeu02,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4737,Pedro Baez,5,111,Pedro Baez,baezpe01,1486,Pedro Pages,pagespe01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,1758,Pedro Strop,3,1929,Pedro Strop,stroppe01,1804,Pedro Severino,severpe01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,2894,Rajai Davis,1,466,Rajai Davis,davisra01,474,JD Davis,davisjd01,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,5091,Robbie Erlin,5,578,Robbie Erlin,erlinro01,1620,Robbie Ray,rayro02,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 15 different SbaPlayers,1800,Ronny Rodriguez,3,1672,Ronny Rodriguez,rodriro03,1683,Randy Rodriguez,rodrira02,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,1801,Rosell Herrera,3,883,Rosell Herrera,herrero02,884,Jose Herrera,herrejo04,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 6 different SbaPlayers,4757,Ryan Braun,5,244,Ryan Braun,braunry02,1719,Ryan Rua,ruary01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,5102,Ryan Buchter,5,276,Ryan Buchter,buchtry01,287,Ryan Burr,burrry01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,2926,Ryan Flaherty,1,621,Ryan Flaherty,flahery01,622,Jack Flaherty,flaheja01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 6 different SbaPlayers,2928,Ryan Madson,1,1180,Ryan Madson,madsory01,935,Bryan Hudson,hudsobr01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 7 different SbaPlayers,2932,Ryan Rua,1,1719,Ryan Rua,ruary01,244,Ryan Braun,braunry02,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,5109,Ryon Healy,5,842,Ryon Healy,healyry01,845,Jon Heasley,heasljo01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,1826,Sam Dyson,3,554,Sam Dyson,dysonsa01,1139,Sam Long,longsa01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,2941,Sam Freeman,1,653,Sam Freeman,freemsa01,651,Mike Freeman,freemmi01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,1837,Scott Oberg,3,1448,Scott Oberg,obergsc01,1772,Scott Schebler,schebsc01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,1838,Scott Schebler,3,1772,Scott Schebler,schebsc01,1448,Scott Oberg,obergsc01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 16 different SbaPlayers,1844,Sean Rodriguez,3,1671,Sean Rodriguez,rodrise01,1685,Endy Rodriguez,rodrien01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4393,Shane Greene,5,769,Shane Greene,greensh02,770,Hunter Greene,greenhu01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,2963,Spencer Kieboom,1,1037,Spencer Kieboom,kiebosp01,1038,Carter Kieboom,kieboca01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,5129,Steven Souza Jr,5,1881,Steven Souza Jr,souzast01,543,Steven Duggar,duggast01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,5130,Tanner Roark,5,1659,Tanner Roark,roarkta01,122,Tanner Banks,banksta01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 6 different SbaPlayers,5135,Taylor Williams,5,2155,Taylor Williams,willita01,2110,Taylor Walls,wallsta01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,1880,Tayron Guerrero,3,788,Tayron Guerrero,guerrta01,790,Taylor Guerrieri,guerrta02,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4686,Todd Frazier,5,647,Todd Frazier,frazito01,648,Adam Frazier,fraziad01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4523,Tommy Hunter,5,941,Tommy Hunter,hunteto02,859,Tommy Henry,henryto01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,1926,Tyler Austin,3,103,Tyler Austin,austity01,1399,Tyler Naquin,naquity01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,5151,Tyler Bashlor,5,144,Tyler Bashlor,bashlty01,1183,Tyler Mahle,mahlety01,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,4551,Tyler Flowers,5,630,Tyler Flowers,flowety01,1691,Tyler Rogers,rogerty01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 6 different SbaPlayers,1937,Tyler Olson,3,1460,Tyler Olson,olsonty01,922,Tyler Holton,holtoty01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 6 different SbaPlayers,1942,Tyler White,3,2141,Tyler White,whitety01,2094,Tyler Wade,wadety01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 7 different SbaPlayers,3025,Victor Martinez,1,1221,Victor Martinez,martivi01,325,Victor Caratini,caratvi01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,1959,Welington Castillo,3,343,Welington Castillo,castiwe01,341,Diego Castillo,castidi02,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4537,Will Harris,5,825,Will Harris,harriwi10,827,Michael Harris,harrimi04,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,1978,Yadiel Rivera,3,1656,Yadiel Rivera,riverya01,1657,Emmanuel Rivera,riverem01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,3055,Yefry Ramirez,1,1607,Yefry Ramirez,ramirye01,1606,Noe Ramirez,ramirno01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4126,Yolmer Sanchez,5,1744,Yolmer Sanchez,sanchca01,1747,Ali Sanchez,sanchal04,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,3065,Zach Duke,1,545,Zach Duke,dukeza01,1137,Zach Logue,logueza01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4507,Zack Britton,5,260,Zack Britton,brittza01,281,Zack Burdi,burdiza01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,2008,Zack Cozart,3,428,Zack Cozart,cozarza01,1818,Zack Short,shortza01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,1019,Adalberto Mejia,3,1296,Adalberto Mejia,mejiaad01,1349,Adalberto Mondesi,mondera02,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,1049,Alex McRae,3,1288,Alex McRae,mcraeal01,308,Alex Call,callal02,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 9 different SbaPlayers,4799,Austin Allen,5,47,Austin Allen,allenau01,483,Austin Dean,deanau01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 9 different SbaPlayers,4800,Austin Brice,5,253,Austin Brice,briceau01,1649,Austin Riley,rileyau01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 11 different SbaPlayers,1083,Austin Dean,3,483,Austin Dean,deanau01,16,Austin Adams,adamsau02,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,1111,Brad Wieck,3,2150,Brad Wieck,wieckbr01,1510,Brad Peacock,peacobr01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,1112,Branden Kline,3,1059,Branden Kline,klinebr01,1052,Brandon Kintzler,kintzbr01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,4563,Brandon Brennan,5,249,Brandon Brennan,brennbr01,195,Brandon Bielak,bielabr01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,4840,Christin Stewart,5,1910,Christin Stewart,stewach02,1789,Christian Scott,scottch01,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,1214,Corban Joseph,3,997,Corban Joseph,josepco01,996,Caleb Joseph,josepca01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 6 different SbaPlayers,1224,Curtis Granderson,3,762,Curtis Granderson,grandcu01,73,Tim Anderson,anderti01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 7 different SbaPlayers,1289,Edgar Garcia,3,686,Edgar Garcia,garcied01,681,Greg Garcia,garcigr01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,1331,Gabriel Ynoa,3,2214,Gabriel Ynoa,ynoaga01,1379,Gabriel Moya,moyaga01,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,1348,Gordon Beckham,3,160,Gordon Beckham,beckhgo01,159,Jordan Beck,beckjo01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,1364,Hector Noesi,3,1429,Hector Noesi,noesihe01,1413,Hector Neris,nerishe01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,1371,Humberto Arteaga,3,97,Humberto Arteaga,arteahu01,339,Humberto Castellanos,castehu01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4929,Jairo Diaz,5,501,Jairo Diaz,diazja01,511,Yainer Diaz,diazya02,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4967,Jordan Yamamoto,5,2205,Jordan Yamamoto,yamamjo01,1699,Jordan Romano,romanjo03,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4983,Josh James,5,965,Josh James,jamesjo02,1695,Josh Rojas,rojasjo01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4985,Josh Osich,5,1469,Josh Osich,osichjo01,1852,Josh Smith,smithjo11,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 6 different SbaPlayers,1546,Justin Shafer,3,1807,Justin Shafer,shafeju01,1837,Justin Slaten,slateju01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 6 different SbaPlayers,1554,Kelvin Herrera,3,881,Kelvin Herrera,herreke01,864,Kevin Herget,hergeke01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,5009,Kyle Ryan,5,1730,Kyle Ryan,ryanky01,1731,Ryder Ryan,ryanry01,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,5012,Lewis Thorpe,5,1989,Lewis Thorpe,thorple01,1990,Drew Thorpe,thorpdr01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4664,Luis Avilan,5,106,Luis Avilan,avilalu01,716,Luis Gil,gillu01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,1614,Luke Bard,3,126,Luke Bard,bardlu01,118,Luken Baker,bakerlu01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 6 different SbaPlayers,1619,Mac Williamson,3,2163,Mac Williamson,willima11,2154,Mason Williams,willima10,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 11 different SbaPlayers,1629,Marco Hernandez,3,872,Marco Hernandez,hernama02,880,Carlos Hernandez,hernaca04,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,1642,Matt Albers,3,29,Matt Albers,alberma01,2109,Matt Wallner,wallnma01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,1656,Matt Skole,3,1835,Matt Skole,skolema01,2183,Matt Wisler,wislema01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 6 different SbaPlayers,1680,Michel Baez,3,113,Michel Baez,baezmi01,1473,Michel Otanez,otanemi01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 6 different SbaPlayers,5052,Mike Freeman,5,651,Mike Freeman,freemmi01,653,Sam Freeman,freemsa01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,1694,Mike Morin,3,1370,Mike Morin,morinmi01,1335,Mike Minor,minormi01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4536,Nate Lowe,5,1155,Nathaniel Lowe,lowena01,990,Nate Jones,jonesna01,0.783,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,1718,Nick Dini,3,518,Nick Dini,dinini01,1230,Nick Martini,martini02,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,5064,Nick Goody,5,750,Nick Goody,goodyni01,752,Nick Gordon,gordoni01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4704,Nick Margevicius,5,1197,Nick Margevicius,margeni01,1230,Nick Martini,martini02,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,1792,Roberto Osuna,3,1470,Roberto Osuna,osunaro01,1938,Robert Suarez,suarero01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,1811,Ryan Carpenter,3,328,Ryan Carpenter,carpery01,330,Kerry Carpenter,carpeke01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,1813,Ryan Goins,3,728,Ryan Goins,goinsry01,731,Yan Gomes,gomesya01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 10 different SbaPlayers,4363,Ryan Weber,5,2128,Ryan Weber,weberry01,2123,Ryan Weathers,weathry01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,5112,Scott Heineman,5,850,Scott Heineman,heinesc01,851,Tyler Heineman,heinety01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 7 different SbaPlayers,4654,Shaun Anderson,5,72,Shaun Anderson,andersh01,74,Ian Anderson,anderia01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,1877,Taylor Cole,3,397,Taylor Cole,coleta01,384,Taylor Clarke,clarkta01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,1878,Taylor Guerrieri,3,790,Taylor Guerrieri,guerrta02,788,Tayron Guerrero,guerrta01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,1938,Tyler Saladino,3,1737,Tyler Saladino,saladty01,726,Tyler Glasnow,glasnty01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,4600,Tyler Webb,5,2125,Tyler Webb,webbty01,2094,Tyler Wade,wadety01,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,1944,Victor Alcantara,3,33,Victor Alcantara,alcanvi01,34,Sergio Alcantara,alcanse01,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,5163,Wilmer Font,5,634,Wilmer Font,fontwi01,516,Wilmer Difo,difowi01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,2002,Zac Reininger,3,1628,Zac Reininger,reiniza01,774,Zack Greinke,greinza01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4241,Trevor Rosenthal,5,1713,Trevor Rosenthal,rosentr01,1902,Trevor Stephan,stephtr01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,5170,Zack Burdi,5,281,Zack Burdi,burdiza01,260,Zack Britton,brittza01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4806,Beau Taylor,5,1968,Beau Taylor,taylobe11,1966,Blake Taylor,taylobl01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,4839,Christian Colon,5,406,Christian Colon,colonch01,1789,Christian Scott,scottch01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4872,Drew Butera,5,290,Drew Butera,buterdr01,2120,Drew Waters,waterdr01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4933,Jake Noll,5,1435,Jake Noll,nollja01,57,Jake Alu,aluja01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 6 different SbaPlayers,4975,Jose Garcia,5,682,Robel Garcia,garciro02,690,Adolis Garcia,garciad02,0.783,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4981,Joseph Odom,5,1450,Joseph Odom,odomjo01,1707,Jose Rondon,rondojo02,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,5058,Monte Harrison,5,831,Monte Harrison,harrimo01,829,Josh Harrison,harrijo05,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4408,Wyatt Mathisen,5,1236,Wyatt Mathisen,mathiwy01,1331,Wyatt Mills,millswy01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4791,Andrew Triggs,5,2014,Andrew Triggs,triggan01,1400,Andrew Nardi,nardian01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4697,Brady Lail,5,1084,Brady Lail,lailbr01,206,Bradley Blalock,blalobr01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 8 different SbaPlayers,4562,Brandon Bailey,5,116,Brandon Bailey,bailebr01,2112,Brandon Walter,waltebr01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,4432,Brandon Leibrandt,5,1111,Brandon Leibrandt,leibrbr01,249,Brandon Brennan,brennbr01,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,4819,Brian Moran,5,1362,Brian Moran,moranbr01,1260,Brian McCann,mccanbr01,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4823,Cam Hill,5,902,Cam Hill,hillca02,900,Tim Hill,hillti01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4848,Cy Sneed,5,1860,Cy Sneed,sneedcy01,1625,Cody Reed,reedco01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4849,Dakota Bacus,5,108,Dakota Bacus,bacusda01,934,Dakota Hudson,hudsoda02,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 4 different SbaPlayers,4622,Deivi Garcia,5,688,Deivi Garcia,garcide01,687,Dermis Garcia,garcide02,1.000,Choose correct match from 4 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4915,Humberto Mejia,5,1297,Humberto Mejia,mejiahu01,1296,Adalberto Mejia,mejiaad01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4216,James Hoyt,5,931,James Hoyt,hoytja01,1477,James Outman,outmaja01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,3810,Javy A Guerra,4,784,Javy Guerra,guerrja02,786,Javy Guerra,guerrja01,0.917,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4235,Jesse Hahn,5,804,Jesse Hahn,hahnje01,370,Jesse Chavez,chaveje01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4954,Joey Gerber,5,712,Joey Gerber,gerbejo01,609,Jose Ferrer,ferrejo01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 5 different SbaPlayers,4336,Justin Topa,5,1999,Justin Topa,topaju01,1857,Justin Smoak,smoakju01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,5008,Kyle Hart,5,832,Kyle Hart,hartky01,830,Kyle Harrison,harriky01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,5033,Matt Hall,5,806,Matt Hall,hallma02,1182,Matt Magill,magilma01,1.000,Choose correct match from 3 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,5072,Nik Turley,5,2027,Nik Turley,turleni01,940,Nick Hundley,hundlni01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 9 different SbaPlayers,5074,Nivaldo Rodriguez,5,1687,Nivaldo Rodriguez,rodrini01,1685,Endy Rodriguez,rodrien01,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,5085,Ramon Rosso,5,1716,Ramon Rosso,rossora01,2037,Ramon Urias,uriasra01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 10 different SbaPlayers,5089,Rico Garcia,5,693,Rico Garcia,garciri01,689,Rony Garcia,garciro03,1.000,Choose correct match from 5 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4230,Ryan Sherriff,5,1814,Ryan Sherriff,sherrry01,858,Ryan Hendrix,hendrry01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,4682,Sam Selman,5,1798,Sam Selman,selmasa01,653,Sam Freeman,freemsa01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 2 different SbaPlayers,5124,Stephen Tarpley,5,1958,Stephen Tarpley,tarplst01,1070,Stephen Kolek,kolekst01,1.000,Choose correct match from 2 options
|
||||
player_ambiguous_match,Player could match 3 different SbaPlayers,4487,Taylor Guilbeau,5,791,Taylor Guilbeau,guilbta01,717,Tyler Gilbert,gilbety01,1.000,Choose correct match from 3 options
|
||||
middle_initial_conflict,3 players with similar first/last names but different middle initials,4187,Luis H Garcia,5,,,,5017,Luis Garcia,,N/A,"Verify these are different people: Luis H Garcia, Luis Garcia, Luis V Garcia"
|
||||
middle_initial_conflict,2 players with similar first/last names but different middle initials,4660,Will Smith,5,,,,4181,Will D Smith,,N/A,"Verify these are different people: Will Smith, Will D Smith"
|
||||
middle_initial_conflict,2 players with similar first/last names but different middle initials,4588,Javy Guerra,5,,,,3810,Javy A Guerra,,N/A,"Verify these are different people: Javy Guerra, Javy A Guerra"
|
||||
|
@ -0,0 +1,828 @@
|
||||
risk+AF8-type,risk+AF8-reason,player+AF8-id,player+AF8-name,player+AF8-seasons,sba1+AF8-id,sba1+AF8-name,sba1+AF8-bbref,sba2+AF8-id,sba2+AF8-name,sba2+AF8-bbref,similarity+AF8-score,action+AF8-needed,resolution
|
||||
sbaplayer+AF8-conflict,Very similar SbaPlayer names (similarity: 1.000),,,,45,Logan Allen,allenlo01,48,Logan Allen,allenlo02,1,+ACI-Verify these are different people, not duplicates+ACI-,DIFFERENT+AF8-PEOPLE
|
||||
sbaplayer+AF8-conflict,Very similar SbaPlayer names (similarity: 0.815),,,,298,Miguel Cabrera,cabremi01,300,Melky Cabrera,cabreme01,0.815,+ACI-Verify these are different people, not duplicates+ACI-,DIFFERENT+AF8-PEOPLE
|
||||
sbaplayer+AF8-conflict,Very similar SbaPlayer names (similarity: 1.000),,,,341,Diego Castillo,castidi02,345,Diego Castillo,castidi01,1,+ACI-Verify these are different people, not duplicates+ACI-,DIFFERENT+AF8-PEOPLE
|
||||
sbaplayer+AF8-conflict,Very similar SbaPlayer names (similarity: 0.824),,,,410,Willson Contreras,contrwi01,411,William Contreras,contrwi02,0.824,+ACI-Verify these are different people, not duplicates+ACI-,DIFFERENT+AF8-PEOPLE
|
||||
sbaplayer+AF8-conflict,Very similar SbaPlayer names (similarity: 0.880),,,,682,Robel Garcia,garciro02,692,Robert Garcia,garciro04,0.88,+ACI-Verify these are different people, not duplicates+ACI-,DIFFERENT+AF8-PEOPLE
|
||||
sbaplayer+AF8-conflict,Very similar SbaPlayer names (similarity: 0.818),,,,689,Rony Garcia,garciro03,693,Rico Garcia,garciri01,0.818,+ACI-Verify these are different people, not duplicates+ACI-,DIFFERENT+AF8-PEOPLE
|
||||
sbaplayer+AF8-conflict,Very similar SbaPlayer names (similarity: 1.000),,,,784,Javy Guerra,guerrja02,786,Javy Guerra,guerrja01,1,+ACI-Verify these are different people, not duplicates+ACI-,DIFFERENT+AF8-PEOPLE
|
||||
sbaplayer+AF8-conflict,Very similar SbaPlayer names (similarity: 0.839),,,,870,Cesar Hernandez,hernace02,880,Carlos Hernandez,hernaca04,0.839,+ACI-Verify these are different people, not duplicates+ACI-,DIFFERENT+AF8-PEOPLE
|
||||
sbaplayer+AF8-conflict,Very similar SbaPlayer names (similarity: 0.818),,,,893,John Hicks,hicksjo02,894,Jordan Hicks,hicksjo03,0.818,+ACI-Verify these are different people, not duplicates+ACI-,DIFFERENT+AF8-PEOPLE
|
||||
sbaplayer+AF8-conflict,Very similar SbaPlayer names (similarity: 0.833),,,,1222,Jose Martinez,martijo08,1229,JD Martinez,martijd02,0.833,+ACI-Verify these are different people, not duplicates+ACI-,DIFFERENT+AF8-PEOPLE
|
||||
sbaplayer+AF8-conflict,Very similar SbaPlayer names (similarity: 0.833),,,,1603,Neil Ramirez,ramirne01,1605,Nick Ramirez,ramirni01,0.833,+ACI-Verify these are different people, not duplicates+ACI-,DIFFERENT+AF8-PEOPLE
|
||||
sbaplayer+AF8-conflict,Very similar SbaPlayer names (similarity: 0.870),,,,1603,Neil Ramirez,ramirne01,1606,Noe Ramirez,ramirno01,0.87,+ACI-Verify these are different people, not duplicates+ACI-,DIFFERENT+AF8-PEOPLE
|
||||
sbaplayer+AF8-conflict,Very similar SbaPlayer names (similarity: 0.846),,,,1639,Mark Reynolds,reynoma01,1640,Matt Reynolds,reynoma03,0.846,+ACI-Verify these are different people, not duplicates+ACI-,DIFFERENT+AF8-PEOPLE
|
||||
sbaplayer+AF8-conflict,Very similar SbaPlayer names (similarity: 0.839),,,,1662,David Robertson,roberda08,1663,Daniel Robertson,roberda10,0.839,+ACI-Verify these are different people, not duplicates+ACI-,DIFFERENT+AF8-PEOPLE
|
||||
sbaplayer+AF8-conflict,Very similar SbaPlayer names (similarity: 0.867),,,,1672,Ronny Rodriguez,rodriro03,1683,Randy Rodriguez,rodrira02,0.867,+ACI-Verify these are different people, not duplicates+ACI-,DIFFERENT+AF8-PEOPLE
|
||||
sbaplayer+AF8-conflict,Very similar SbaPlayer names (similarity: 0.812),,,,1674,Richard Rodriguez,rodriri05,1683,Randy Rodriguez,rodrira02,0.812,+ACI-Verify these are different people, not duplicates+ACI-,DIFFERENT+AF8-PEOPLE
|
||||
sbaplayer+AF8-conflict,Very similar SbaPlayer names (similarity: 0.867),,,,1673,Joely Rodriguez,rodrijo06,1677,Jefry Rodriguez,rodrije01,0.867,+ACI-Verify these are different people, not duplicates+ACI-,DIFFERENT+AF8-PEOPLE
|
||||
sbaplayer+AF8-conflict,Very similar SbaPlayer names (similarity: 0.828),,,,1679,Elvin Rodriguez,rodriel02,1685,Endy Rodriguez,rodrien01,0.828,+ACI-Verify these are different people, not duplicates+ACI-,DIFFERENT+AF8-PEOPLE
|
||||
sbaplayer+AF8-conflict,Very similar SbaPlayer names (similarity: 0.880),,,,1689,Taylor Rogers,rogerta01,1691,Tyler Rogers,rogerty01,0.88,+ACI-Verify these are different people, not duplicates+ACI-,DIFFERENT+AF8-PEOPLE
|
||||
sbaplayer+AF8-conflict,Very similar SbaPlayer names (similarity: 0.900),,,,1695,Josh Rojas,rojasjo01,1696,Jose Rojas,rojasjo02,0.9,+ACI-Verify these are different people, not duplicates+ACI-,DIFFERENT+AF8-PEOPLE
|
||||
sbaplayer+AF8-conflict,Very similar SbaPlayer names (similarity: 0.857),,,,1695,Josh Rojas,rojasjo01,1697,Johan Rojas,rojasjo03,0.857,+ACI-Verify these are different people, not duplicates+ACI-,DIFFERENT+AF8-PEOPLE
|
||||
sbaplayer+AF8-conflict,Very similar SbaPlayer names (similarity: 0.815),,,,1760,Danny Santana,santada01,1762,Dennis Santana,santade01,0.815,+ACI-Verify these are different people, not duplicates+ACI-,DIFFERENT+AF8-PEOPLE
|
||||
sbaplayer+AF8-conflict,Very similar SbaPlayer names (similarity: 0.833),,,,1787,Tayler Scott,scottta02,1788,Tanner Scott,scottta01,0.833,+ACI-Verify these are different people, not duplicates+ACI-,DIFFERENT+AF8-PEOPLE
|
||||
sbaplayer+AF8-conflict,Very similar SbaPlayer names (similarity: 1.000),,,,1841,Will Smith,smithwi05,1843,Will Smith,smithwi04,1,+ACI-Verify these are different people, not duplicates+ACI-,DIFFERENT+AF8-PEOPLE
|
||||
sbaplayer+AF8-conflict,Very similar SbaPlayer names (similarity: 0.842),,,,1842,Joe Smith,smithjo05,1852,Josh Smith,smithjo11,0.842,+ACI-Verify these are different people, not duplicates+ACI-,DIFFERENT+AF8-PEOPLE
|
||||
sbaplayer+AF8-conflict,Very similar SbaPlayer names (similarity: 0.857),,,,1845,Caleb Smith,smithca03,1853,Cade Smith,smithca06,0.857,+ACI-Verify these are different people, not duplicates+ACI-,DIFFERENT+AF8-PEOPLE
|
||||
sbaplayer+AF8-conflict,Very similar SbaPlayer names (similarity: 0.909),,,,1847,Kevan Smith,smithke04,1854,Kevin Smith,smithke05,0.909,+ACI-Verify these are different people, not duplicates+ACI-,DIFFERENT+AF8-PEOPLE
|
||||
sbaplayer+AF8-conflict,Very similar SbaPlayer names (similarity: 0.923),,,,1981,Zach Thompson,thompza01,1985,Zack Thompson,thompza02,0.923,+ACI-Verify these are different people, not duplicates+ACI-,DIFFERENT+AF8-PEOPLE
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,5092,Robbie Ray,5,1620,Robbie Ray,rayro02,578,Robbie Erlin,erlinro01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1620
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4302,Mike Mayers,5,1251,Mike Mayers,mayermi01,615,Mike Fiers,fiersmi01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1251
|
||||
player+AF8-ambiguous+AF8-match,Player could match 12 different SbaPlayers,4827,Carlos Martinez,5,1223,Carlos Martinez,martica04,1222,Jose Martinez,martijo08,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1223
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4900,Gary Sanchez,5,1746,Gary Sanchez,sanchga02,1745,Aaron Sanchez,sanchaa01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1746
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,1772,Ranger Suarez,3,1936,Ranger Suarez,suarera01,1933,Albert Suarez,suareal01,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-1936
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,4433,Jonathan Loaisiga,5,1132,Jonathan Loaisiga,loaisjo01,470,Jonathan Davis,davisjo05,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-286
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4175,Corbin Burnes,5,286,Corbin Burnes,burneco01,133,Jacob Barnes,barneja01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-286
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4234,Brandon Woodruff,5,2196,Brandon Woodruff,woodrbr01,535,Brandon Drury,drurybr01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-2196
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4565,Josh Hader,5,802,Josh Hader,haderjo01,2175,Josh Winder,windejo01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-802
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,4474,Tyler Mahle,5,1183,Tyler Mahle,mahlety01,1244,Tyler Matzek,matzety01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1183
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4632,Freddy Peralta,5,1525,Freddy Peralta,peralfr01,1522,David Peralta,peralda01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1525
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4162,Trevor Bauer,5,150,Trevor Bauer,bauertr01,1248,Trevor May,maytr01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-150
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4324,Pablo Lopez,5,1146,Pablo Lopez,lopezpa01,1148,Alejo Lopez,lopezal03,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1146
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4364,John Means,5,2,John Means,meansjo01,677,John Gant,gantjo01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-2
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4341,Kevin Gausman,5,706,Kevin Gausman,gausmke01,1420,Kevin Newman,newmake01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-706
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,4509,Tyler Glasnow,5,726,Tyler Glasnow,glasnty01,1460,Tyler Olson,olsonty01,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-726
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,5148,Trevor Rogers,5,1693,Trevor Rogers,rogertr01,1691,Tyler Rogers,rogerty01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1693
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4582,Sonny Gray,5,765,Sonny Gray,grayso01,766,Jon Gray,grayjo02,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-765
|
||||
player+AF8-ambiguous+AF8-match,Player could match 8 different SbaPlayers,4504,Luis Castillo,5,344,Luis Castillo,castilu02,342,Jose Castillo,castijo02,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-344
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,4144,Jordan Romano,5,1699,Jordan Romano,romanjo03,778,Jordan Groshans,groshjo01,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-1699
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,5080,Patrick Sandoval,5,1754,Patrick Sandoval,sandopa02,1753,Pablo Sandoval,sandopa01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1754
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4570,Lucas Giolito,5,724,Lucas Giolito,giolilu01,719,Lucas Gilbreath,gilbrlu01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-724
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,1193,Chris Sale,3,1739,Chris Sale,salech01,85,Chris Archer,archech01,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-1739
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4421,Julio Urias,5,2038,Julio Urias,uriasju01,2039,Luis Urias,uriaslu01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-2038
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4628,Chad Green,5,768,Chad Green,greench03,769,Shane Greene,greensh02,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-768
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,1017,Aaron Sanchez,3,1745,Aaron Sanchez,sanchaa01,1746,Gary Sanchez,sanchga02,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1745
|
||||
player+AF8-ambiguous+AF8-match,Player could match 8 different SbaPlayers,4147,Ian Anderson,5,74,Ian Anderson,anderia01,69,Brian Anderson,anderbr06,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-74
|
||||
player+AF8-ambiguous+AF8-match,Player could match 6 different SbaPlayers,5044,Michael Fulmer,5,666,Michael Fulmer,fulmemi01,1721,Michael Rucker,ruckemi01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-666
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,4714,Charlie Morton,5,1375,Charlie Morton,mortoch02,1991,Charlie Tilson,tilsoch01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1375
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,4788,Andrew Chafin,5,363,Andrew Chafin,chafian01,843,Andrew Heaney,heanean01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-363
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,1976,Wily Peralta,3,1523,Wily Peralta,peralwi01,1524,Wandy Peralta,peralwa01,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-1523
|
||||
player+AF8-ambiguous+AF8-match,Player could match 14 different SbaPlayers,4826,Carlos Hernandez,5,880,Carlos Hernandez,hernaca04,870,Cesar Hernandez,hernace02,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-880
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4711,Raisel Iglesias,5,950,Raisel Iglesias,iglesra01,949,Jose Iglesias,iglesjo01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-950
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,4662,Justin Dunn,5,546,Justin Dunn,dunnju01,2034,Justin Upton,uptonju01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-546
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4727,Scott Barlow,5,128,Scott Barlow,barlosc01,129,Joe Barlow,barlojo01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-128
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4246,Jose Urquidy,5,2041,Jose Urquidy,urquijo01,1724,Jose Ruiz,ruizjo01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-2041
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4454,Sandy Alcantara,5,35,Sandy Alcantara,alcansa01,34,Sergio Alcantara,alcanse01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-35
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4252,Zach Eflin,5,562,Zach Eflin,eflinza01,1406,Zach Neal,nealza01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-562
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,5007,Kyle Gibson,5,715,Kyle Gibson,gibsoky01,830,Kyle Harrison,harriky01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-715
|
||||
player+AF8-ambiguous+AF8-match,Player could match 8 different SbaPlayers,1516,Jose Suarez,3,1937,Jose Suarez,suarejo01,59,Jose Alvarez,alvarjo02,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1937
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4842,Cole Sulser,5,1942,Cole Sulser,sulseco01,2022,Cole Tucker,tuckeco01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1942
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4256,Garrett Crochet,5,439,Garrett Crochet,crochga01,1340,Garrett Mitchell,mitchga01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-439
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4124,Tanner Houck,5,927,Tanner Houck,houckta01,1659,Tanner Roark,roarkta01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-927
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,1268,Dillon Peters,3,1544,Dillon Peters,peterdi01,1195,Dillon Maples,mapledi01,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-1544
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,1631,Marcus Stroman,3,1928,Marcus Stroman,stromma01,1799,Marcus Semien,semiema01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1928
|
||||
player+AF8-ambiguous+AF8-match,Player could match 8 different SbaPlayers,4490,Jarlin Garcia,5,684,Jarlin Garcia,garcija04,683,Aramis Garcia,garciar01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-684
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4219,Liam Hendriks,5,857,Liam Hendriks,hendrli01,856,Kyle Hendricks,hendrky01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-857
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,1038,Adrian Sampson,3,1742,Adrian Sampson,sampsad01,1363,Adrian Morejon,morejad01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1742
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,5022,Luke Jackson,5,960,Luke Jackson,jackslu01,961,Alex Jackson,jacksal02,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-960
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,4200,Kyle Freeland,5,650,Kyle Freeland,freelky01,654,Tyler Freeman,freemty01,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-650
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4689,Aaron Civale,5,383,Aaron Civale,civalaa01,55,Aaron Altherr,altheaa01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-383
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4870,Dominic Leone,5,1116,Dominic Leone,leonedo01,322,Dominic Canzone,canzodo01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1116
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4663,Kenley Jansen,5,968,Kenley Jansen,janseke01,969,Danny Jansen,janseda01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-968
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4228,Clayton Kershaw,5,1034,Clayton Kershaw,kershcl01,1644,Clayton Richard,richacl01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1034
|
||||
player+AF8-ambiguous+AF8-match,Player could match 6 different SbaPlayers,4765,Dylan Cease,5,355,Dylan Cease,ceasedy01,433,Dylan Crews,crewsdy01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-355
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,4569,Jose Berrios,5,182,Jose Berrios,berrijo01,139,Jose Barrero,garcijo02,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-182
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4187,Luis H Garcia,5,694,Luis Garcia Jr,garcilu04,690,Adolis Garcia,garciad02,0.815,Choose correct match from 3 options,USE+AF8-SBA+AF8-694
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4946,Jesse Chavez,5,370,Jesse Chavez,chaveje01,804,Jesse Hahn,hahnje01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-370
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4288,Tyler Matzek,5,1244,Tyler Matzek,matzety01,1183,Tyler Mahle,mahlety01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1244
|
||||
player+AF8-ambiguous+AF8-match,Player could match 11 different SbaPlayers,4617,Richard Rodriguez,5,1674,Richard Rodriguez,rodriri05,1683,Randy Rodriguez,rodrira02,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1674
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,4874,Drew Smith,5,1848,Drew Smith,smithdr01,1853,Cade Smith,smithca06,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-1848
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,4517,Tyler Alexander,5,37,Tyler Alexander,alexaty01,39,Blaze Alexander,alexabl01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-37
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4644,Ryan Pressly,5,1584,Ryan Pressly,pressry01,853,Ryan Helsley,helslry01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1584
|
||||
player+AF8-ambiguous+AF8-match,Player could match 8 different SbaPlayers,4172,Devin Williams,5,2158,Devin Williams,willide03,2160,Gavin Williams,williga01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-2158
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,4346,Marco Gonzales,5,735,Marco Gonzales,gonzama02,740,Carlos Gonzalez,gonzaca01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-735
|
||||
player+AF8-ambiguous+AF8-match,Player could match 6 different SbaPlayers,4725,Tyler Rogers,5,1691,Tyler Rogers,rogerty01,1689,Taylor Rogers,rogerta01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1691
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4696,Ryan Tepera,5,1974,Ryan Tepera,teperry01,2128,Ryan Weber,weberry01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1974
|
||||
player+AF8-ambiguous+AF8-match,Player could match 8 different SbaPlayers,4266,Jose Alvarez,5,59,Jose Alvarez,alvarjo02,58,Jose Alvarado,alvarjo03,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-59
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,1217,Corey Kluber,3,1060,Corey Kluber,klubeco01,1063,Corey Knebel,knebeco01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1060
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4989,Josh Taylor,5,1967,Josh Taylor,taylojo02,1404,Josh Naylor,naylojo01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1967
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4845,Corey Knebel,5,1063,Corey Knebel,knebeco01,1060,Corey Kluber,klubeco01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1063
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,4497,Connor Brogdon,5,261,Connor Brogdon,brogdco01,2189,Connor Wong,wongco01,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-261
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,4300,Cristian Javier,5,971,Cristian Javier,javiecr01,2104,Christian Walker,walkech02,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-971
|
||||
player+AF8-ambiguous+AF8-match,Player could match 8 different SbaPlayers,4479,Michael Pineda,5,1560,Michael Pineda,pinedmi01,1047,Michael King,kingmi01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1560
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,5128,Steven Matz,5,1243,Steven Matz,matzst01,243,Steven Brault,braulst01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1243
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4319,Jaime Barria,5,141,Jaime Barria,barrija01,94,Jake Arrieta,arrieja01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-141
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4910,Hector Neris,5,1413,Hector Neris,nerishe01,1429,Hector Noesi,noesihe01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1413
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,5088,Reynaldo Lopez,5,1145,Reynaldo Lopez,lopezre01,1146,Pablo Lopez,lopezpa01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1145
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,4660,Will Smith,5,1841,Will Smith,smithwi05,1843,Will Smith,smithwi04,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1841
|
||||
player+AF8-ambiguous+AF8-match,Player could match 13 different SbaPlayers,1292,Eduardo Rodriguez,3,1675,Eduardo Rodriguez,rodried05,1671,Sean Rodriguez,rodrise01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1675
|
||||
player+AF8-ambiguous+AF8-match,Player could match 9 different SbaPlayers,5106,Ryan Thompson,5,1983,Ryan Thompson,thompry02,1984,Mason Thompson,thompma02,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1983
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4568,Dylan Floro,5,629,Dylan Floro,florody01,1358,Dylan Moore,mooredy01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-629
|
||||
player+AF8-ambiguous+AF8-match,Player could match 7 different SbaPlayers,5045,Michael King,5,1047,Michael King,kingmi01,1998,Michael Tonkin,tonkimi01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1047
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4784,Alex Wood,5,2193,Alex Wood,woodal02,2194,James Wood,woodja03,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-2193
|
||||
player+AF8-ambiguous+AF8-match,Player could match 6 different SbaPlayers,4220,Darwinzon Hernandez,5,877,Darwinzon Hernandez,hernada02,868,David Hernandez,hernada01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-877
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4635,Taylor Widener,5,2149,Taylor Widener,widenta01,2116,Taylor Ward,wardta01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-2149
|
||||
player+AF8-ambiguous+AF8-match,Player could match 9 different SbaPlayers,4429,Noe Ramirez,5,1606,Noe Ramirez,ramirno01,1603,Neil Ramirez,ramirne01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1606
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4708,Gregory Soto,5,1878,Gregory Soto,sotogr01,1767,Gregory Santos,santogr01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1878
|
||||
player+AF8-ambiguous+AF8-match,Player could match 8 different SbaPlayers,4710,Matt Barnes,5,131,Matt Barnes,barnema01,241,Matt Brash,brashma01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-131
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4838,Chris Stratton,5,1922,Chris Stratton,stratch01,1923,Hunter Stratton,strathu01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1922
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,5023,Luke Weaver,5,2124,Luke Weaver,weavelu01,118,Luken Baker,bakerlu01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-2124
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4338,Blake Snell,5,1861,Blake Snell,snellbl01,1735,Blake Sabol,sabolbl01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1861
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,1272,Domingo German,3,713,Domingo German,germado01,1120,Domingo Leyba,leybado01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-713
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,4960,Jon Gray,5,766,Jon Gray,grayjo02,973,Jon Jay,jayjo02,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-766
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4390,Dillon Tate,5,1959,Dillon Tate,tatedi01,1195,Dillon Maples,mapledi01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1959
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4377,Blake Parker,5,1499,Blake Parker,parkebl01,1543,Blake Perkins,perkibl01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1499
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,5024,Madison Bumgarner,5,278,Madison Bumgarner,bumgama01,127,Addison Barger,bargead01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-278
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,5147,Trevor Richards,5,1646,Trevor Richards,richatr01,1693,Trevor Rogers,rogertr01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1646
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4473,Tyler Duffey,5,540,Tyler Duffey,duffety01,2094,Tyler Wade,wadety01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-540
|
||||
player+AF8-ambiguous+AF8-match,Player could match 8 different SbaPlayers,4335,Elieser Hernandez,5,874,Elieser Hernandez,hernael01,867,Felix Hernandez,hernafe02,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-874
|
||||
player+AF8-ambiguous+AF8-match,Player could match 6 different SbaPlayers,4277,Diego Castillo,5,341,Diego Castillo,castidi02,345,Diego Castillo,castidi01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-341
|
||||
player+AF8-ambiguous+AF8-match,Player could match 13 different SbaPlayers,4659,Tyler Anderson,5,68,Tyler Anderson,anderty01,604,Tyler Ferguson,ferguty01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-68
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4362,Rich Hill,5,898,Rich Hill,hillri01,900,Tim Hill,hillti01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-898
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4549,James Karinchak,5,1009,James Karinchak,karinja01,1008,James Kaprielian,kaprija01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1009
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,4679,Wandy Peralta,5,1524,Wandy Peralta,peralwa01,1523,Wily Peralta,peralwi01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1524
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,5095,Robert Stephenson,5,1904,Robert Stephenson,stephro01,1905,Tyler Stephenson,stephty01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1904
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,4580,Pierce Johnson,5,985,Pierce Johnson,johnspi01,987,Bryce Johnson,johnsbr03,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-985
|
||||
player+AF8-ambiguous+AF8-match,Player could match 6 different SbaPlayers,4387,Yohan Ramirez,5,1611,Yohan Ramirez,ramiryo01,1606,Noe Ramirez,ramirno01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1611
|
||||
player+AF8-ambiguous+AF8-match,Player could match 8 different SbaPlayers,1515,Jose Ruiz,3,1724,Jose Ruiz,ruizjo01,1830,Jose Siri,sirijo01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1724
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,1141,Bryan Shaw,3,1808,Bryan Shaw,shawbr01,2191,Bryan Woo,woobr01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1808
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4585,Jake McGee,5,1274,Jake McGee,mcgeeja01,1315,Jake Meyers,meyerja02,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1274
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,2011,Zack Littell,3,1127,Zack Littell,litteza01,1024,Zack Kelly,kellyza01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1127
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4243,Edwin Diaz,5,503,Edwin Diaz,diazed04,506,Lewin Diaz,diazle01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-503
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4577,Joe Kelly,5,1021,Joe Kelly,kellyjo05,20,Jo Adell,adelljo01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1021
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,2575,Hunter Strickland,1,1925,Hunter Strickland,strichu01,1923,Hunter Stratton,strathu01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1925
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4925,Jack Flaherty,5,622,Jack Flaherty,flaheja01,621,Ryan Flaherty,flahery01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-622
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,2252,Edgar Santana,1,1763,Edgar Santana,santaed01,1758,Ervin Santana,santaer01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1763
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,1466,Joe Ross,3,1715,Joe Ross,rossjo01,1696,Jose Rojas,rojasjo02,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1715
|
||||
player+AF8-ambiguous+AF8-match,Player could match 10 different SbaPlayers,4303,Victor Gonzalez,5,743,Victor Gonzalez,gonzavi02,739,Gio Gonzalez,gonzagi01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-743
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4489,Archie Bradley,5,236,Archie Bradley,bradlar01,239,Jackie Bradley Jr,bradlja02,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-236
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4389,Austin Gomber,5,730,Austin Gomber,gombeau01,1704,Austin Romine,rominau01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-730
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,4851,Daniel Hudson,5,933,Daniel Hudson,hudsoda01,988,Daniel Johnson,johnsda07,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-933
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,5066,Nick Neidert,5,1408,Nick Neidert,neideni01,71,Nick Anderson,anderni01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1408
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4431,Zack Greinke,5,774,Zack Greinke,greinza01,1628,Zac Reininger,reiniza01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-774
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,5054,Mike Minor,5,1335,Mike Minor,minormi01,1370,Mike Morin,morinmi01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1335
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,5107,Ryne Harper,5,824,Ryne Harper,harpery01,823,Bryce Harper,harpebr03,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-824
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4783,Alex Reyes,5,1635,Alex Reyes,reyesal02,1637,Pablo Reyes,reyespa01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1635
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4914,Humberto Castellanos,5,339,Humberto Castellanos,castehu01,97,Humberto Arteaga,arteahu01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-339
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4526,Brent Suter,5,1943,Brent Suter,suterbr01,942,Brant Hurter,hurtebr01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1943
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,4310,Caleb Smith,5,1845,Caleb Smith,smithca03,1853,Cade Smith,smithca06,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-1845
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4754,Dane Dunning,5,548,Dane Dunning,dunnida01,977,Dan Jennings,jennida01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-548
|
||||
player+AF8-ambiguous+AF8-match,Player could match 6 different SbaPlayers,5133,Taylor Rogers,5,1689,Taylor Rogers,rogerta01,1691,Tyler Rogers,rogerty01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1689
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4308,Kyle Hendricks,5,856,Kyle Hendricks,hendrky01,435,Kyle Crick,crickky01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-856
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,4171,Chris Martin,5,1214,Chris Martin,martich02,1216,Richie Martin,martiri01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1214
|
||||
player+AF8-ambiguous+AF8-match,Player could match 14 different SbaPlayers,5017,Luis Garcia,5,694,Luis Garcia Jr,garcilu04,690,Adolis Garcia,garciad02,0.88,Choose correct match from 5 options,USE+AF8-SBA+AF8-694
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4656,Tyler Kinley,5,1050,Tyler Kinley,kinlety01,717,Tyler Gilbert,gilbety01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1050
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4434,Aaron Bummer,5,279,Aaron Bummer,bummeaa01,667,Carson Fulmer,fulmeca01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-279
|
||||
player+AF8-ambiguous+AF8-match,Player could match 7 different SbaPlayers,4194,Yimi Garcia,5,680,Yimi Garcia,garciyi01,688,Deivi Garcia,garcide01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-680
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4436,Martin Perez,5,1535,Martin Perez,perezma02,1582,Martin Prado,pradoma01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1535
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,4571,Miguel Castro,5,350,Miguel Castro,castrmi01,1757,Miguel Sano,sanomi01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-350
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4652,John Gant,5,677,John Gant,gantjo01,2,John Means,meansjo01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-677
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4416,Blake Taylor,5,1966,Blake Taylor,taylobl01,1968,Beau Taylor,taylobe11,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1966
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,5158,Wade LeBlanc,5,1104,Wade LeBlanc,leblawa01,1105,Charles Leblanc,leblach01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1104
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4825,Carlos Estevez,5,585,Carlos Estevez,estevca01,1537,Carlos Perez,perezca02,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-585
|
||||
player+AF8-ambiguous+AF8-match,Player could match 6 different SbaPlayers,5149,Trevor Williams,5,2156,Trevor Williams,willitr01,2155,Taylor Williams,willita01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-2156
|
||||
player+AF8-ambiguous+AF8-match,Player could match 6 different SbaPlayers,4482,Brett Martin,5,1218,Brett Martin,martibr01,828,Brett Harris,harribr02,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1218
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4755,Trevor May,5,1248,Trevor May,maytr01,150,Trevor Bauer,bauertr01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1248
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,4402,Taijuan Walker,5,2105,Taijuan Walker,walketa01,2107,Jordan Walker,walkejo02,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-2105
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4554,Steven Brault,5,243,Steven Brault,braulst01,1243,Steven Matz,matzst01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-243
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4974,Jose Alvarado,5,58,Jose Alvarado,alvarjo03,59,Jose Alvarez,alvarjo02,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-58
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4459,Bryse Wilson,5,2171,Bryse Wilson,wilsobr02,2166,Bobby Wilson,wilsobo02,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-2171
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,1467,Joe Smith,3,1842,Joe Smith,smithjo05,1852,Josh Smith,smithjo11,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-1842
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4519,Jorge Alcala,5,32,Jorge Alcala,alcaljo01,40,Jorge Alfaro,alfarjo01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-32
|
||||
player+AF8-ambiguous+AF8-match,Player could match 8 different SbaPlayers,4794,Anthony Banda,5,121,Anthony Banda,bandaan01,176,Anthony Bender,bendean01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-121
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,4399,Garrett Richards,5,1645,Garrett Richards,richaga01,439,Garrett Crochet,crochga01,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-1645
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,5004,Kyle Crick,5,435,Kyle Crick,crickky01,696,Kyle Garlick,garliky01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-435
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,1511,Jose Quijada,3,1594,Jose Quijada,quijajo01,1596,Jose Quintana,quintjo01,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-1594
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,4866,Derek Holland,5,914,Derek Holland,hollade01,915,Greg Holland,hollagr01,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-914
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4396,Griffin Canning,5,317,Griffin Canning,cannigr01,408,Griffin Conine,coningr01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-317
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,4395,Andrew Heaney,5,843,Andrew Heaney,heanean01,363,Andrew Chafin,chafian01,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-843
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,5018,Luis Patino,5,1504,Luis Patino,patinlu01,1240,Luis Matos,matoslu02,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1504
|
||||
player+AF8-ambiguous+AF8-match,Player could match 8 different SbaPlayers,1079,Austin Adams,3,16,Austin Adams,adamsau02,471,Austin Davis,davisau01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-16
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,4616,Taylor Hearn,5,844,Taylor Hearn,hearnta01,2116,Taylor Ward,wardta01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-844
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4446,Greg Holland,5,915,Greg Holland,hollagr01,914,Derek Holland,hollade01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-915
|
||||
player+AF8-ambiguous+AF8-match,Player could match 8 different SbaPlayers,4532,Brett Anderson,5,66,Brett Anderson,anderbr04,69,Brian Anderson,anderbr06,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-66
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,4531,Anthony Bass,5,145,Anthony Bass,bassan01,121,Anthony Banda,bandaan01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-145
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4971,Jorge Lopez,5,1144,Jorge Lopez,lopezjo02,1148,Alejo Lopez,lopezal03,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1144
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4445,Brady Singer,5,1827,Brady Singer,singebr01,2226,Brad Ziegler,zieglbr01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1827
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4637,Logan Allen,5,45,Logan Allen,allenlo01,48,Logan Allen,allenlo02,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-45
|
||||
player+AF8-ambiguous+AF8-match,Player could match 10 different SbaPlayers,4835,Chase Anderson,5,67,Chase Anderson,anderch01,72,Shaun Anderson,andersh01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-67
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4478,Matt Andriese,5,76,Matt Andriese,andrima01,131,Matt Barnes,barnema01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-76
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4420,Jake Arrieta,5,94,Jake Arrieta,arrieja01,596,Jake Faria,fariaja01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-94
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4381,Daniel Bard,5,125,Daniel Bard,bardda01,536,Daniel Duarte,duartda01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-125
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4927,Jacob Barnes,5,133,Jacob Barnes,barneja01,991,JaCoby Jones,jonesja07,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-133
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,4811,Brandon Bielak,5,195,Brandon Bielak,bielabr01,173,Brandon Belt,beltbr01,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-195
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4456,Trevor Cahill,5,304,Trevor Cahill,cahiltr01,1294,Trevor Megill,megiltr01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-304
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4305,Carlos Carrasco,5,331,Carlos Carrasco,carraca01,420,Carlos Correa,correca01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-331
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,4560,Taylor Clarke,5,384,Taylor Clarke,clarkta01,397,Taylor Cole,coleta01,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-384
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4742,Alex Claudio,5,387,Alex Claudio,claudal01,210,Alex Blandino,blandal01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-387
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4269,Patrick Corbin,5,416,Patrick Corbin,corbipa01,115,Patrick Bailey,bailepa01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-416
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4290,Zach Davies,5,465,Zach Davies,davieza02,472,Noah Davis,davisno01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-465
|
||||
player+AF8-ambiguous+AF8-match,Player could match 7 different SbaPlayers,4801,Austin Davis,5,471,Austin Davis,davisau01,16,Austin Adams,adamsau02,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-471
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,1950,Wade Davis,3,468,Wade Davis,daviswa01,474,JD Davis,davisjd01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-468
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4836,Chase De Jong,5,478,Chase De Jong,dejonch01,67,Chase Anderson,anderch01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-478
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4257,Rafael Dolis,5,523,Rafael Dolis,dolisra01,499,Rafael Devers,deverra01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-523
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,2601,Jake Faria,1,596,Jake Faria,fariaja01,94,Jake Arrieta,arrieja01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-596
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4643,Buck Farmer,5,597,Buck Farmer,farmebu01,598,Kyle Farmer,farmeky01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-597
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4237,Josh Fleming,5,623,Josh Fleming,flemijo01,607,Jose Fermin,fermijo01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-623
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,4521,Matt Foster,5,638,Matt Foster,fostema01,610,Matt Festa,festama01,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-638
|
||||
player+AF8-ambiguous+AF8-match,Player could match 7 different SbaPlayers,4322,Bryan Garcia,5,685,Bryan Garcia,garcibr01,689,Rony Garcia,garciro03,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-685
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4488,Amir Garrett,5,698,Amir Garrett,garream01,700,Reed Garrett,garrere01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-698
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4814,Braxton Garrett,5,701,Braxton Garrett,garrebr01,699,Stone Garrett,garrest01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-701
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4999,Kevin Ginkel,5,722,Kevin Ginkel,ginkeke01,1025,Kevin Kelly,kellyke02,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-722
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4712,Chi Chi Gonzalez,5,737,Chi Chi Gonzalez,gonzach01,739,Gio Gonzalez,gonzagi01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-737
|
||||
player+AF8-ambiguous+AF8-match,Player could match 7 different SbaPlayers,4405,David Hale,5,805,David Hale,haleda02,457,David Dahl,dahlda01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-805
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4291,JA Happ,5,821,JA Happ,happja01,820,Ian Happ,happia01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-821
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,5034,Matt Harvey,5,835,Matt Harvey,harvema01,131,Matt Barnes,barnema01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-835
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,5103,Ryan Helsley,5,853,Ryan Helsley,helslry01,1584,Ryan Pressly,pressry01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-853
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,5137,Tim Hill,5,900,Tim Hill,hillti01,902,Cam Hill,hillca02,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-900
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4731,Spencer Howard,5,930,Spencer Howard,howarsp01,924,Spencer Horwitz,horwisp01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-930
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4749,Sam Howard,5,929,Sam Howard,howarsa01,903,Sam Hilliard,hillisa01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-929
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4952,Joe Jimenez,5,979,Joe Jimenez,jimenjo02,982,Leo Jimenez,jimenle01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-979
|
||||
player+AF8-ambiguous+AF8-match,Player could match 6 different SbaPlayers,4721,Anthony Kay,5,1012,Anthony Kay,kayan01,145,Anthony Bass,bassan01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1012
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4199,Brad Keller,5,1016,Brad Keller,kellebr01,1322,Brad Miller,millebr02,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1016
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4327,Mitch Keller,5,1017,Mitch Keller,kellemi03,1500,Mitchell Parker,parkemi01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1017
|
||||
player+AF8-ambiguous+AF8-match,Player could match 6 different SbaPlayers,4258,Brandon Kintzler,5,1052,Brandon Kintzler,kintzbr01,1059,Branden Kline,klinebr01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1052
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,4703,Michael Lorenzen,5,1151,Michael Lorenzen,lorenmi01,1539,Michael Perez,perezmi03,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-1151
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,4966,Jordan Lyles,5,1171,Jordan Lyles,lylesjo01,1103,Jordan Leasure,leasujo01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1171
|
||||
player+AF8-ambiguous+AF8-match,Player could match 7 different SbaPlayers,4631,Andrew Miller,5,1320,Andrew Miller,millean01,1703,Andrew Romine,rominan01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1320
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,5084,Rafael Montero,5,1352,Rafael Montero,montera01,1465,Rafael Ortega,ortegra01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1352
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,4209,David Peterson,5,1548,David Peterson,peterda01,1662,David Robertson,roberda08,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-1548
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4496,Cody Ponce,5,1573,Cody Ponce,ponceco01,1579,Cody Poteet,poteeco01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1573
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,4980,Jose Quintana,5,1596,Jose Quintana,quintjo01,1594,Jose Quijada,quijajo01,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-1596
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,4227,Tanner Rainey,5,1599,Tanner Rainey,raineta01,122,Tanner Banks,banksta01,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-1599
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4636,Brooks Raley,5,1601,Brooks Raley,raleybr01,1110,Brooks Lee,leebr02,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1601
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,4146,Erasmo Ramirez,5,1604,Erasmo Ramirez,ramirer02,1607,Yefry Ramirez,ramirye01,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-1604
|
||||
player+AF8-ambiguous+AF8-match,Player could match 12 different SbaPlayers,4340,Joely Rodriguez,5,1673,Joely Rodriguez,rodrijo06,1677,Jefry Rodriguez,rodrije01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1673
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4863,Dennis Santana,5,1762,Dennis Santana,santade01,1760,Danny Santana,santada01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1762
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4196,Tanner Scott,5,1788,Tanner Scott,scottta01,1787,Tayler Scott,scottta02,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1788
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,4251,Riley Smith,5,1850,Riley Smith,smithri01,1841,Will Smith,smithwi05,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1850
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4512,Wander Suero,5,1940,Wander Suero,suerowa01,646,Wander Franco,francwa01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1940
|
||||
player+AF8-ambiguous+AF8-match,Player could match 10 different SbaPlayers,4655,Jose Urena,5,2035,Jose Urena,urenajo01,1973,Jose Tena,tenajo01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-2035
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4127,Cesar Valdez,5,2046,Cesar Valdez,valdece01,870,Cesar Hernandez,hernace02,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-2046
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4586,Phillips Valdez,5,2047,Phillips Valdez,valdeph01,589,Phillip Evans,evansph01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-2047
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4610,Vince Velasquez,5,2065,Vince Velasquez,velasvi01,2067,Andrew Velazquez,velazan01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-2065
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,4702,Austin Voth,5,2091,Austin Voth,vothau01,427,Austin Cox,coxau01,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-2091
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,5047,Michael Wacha,5,2093,Michael Wacha,wachami01,371,Michael Chavis,chavimi01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-2093
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4614,Rowan Wick,5,2147,Rowan Wick,wickro01,2148,Jordan Wicks,wicksjo01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-2147
|
||||
player+AF8-ambiguous+AF8-match,Player could match 8 different SbaPlayers,4683,Justin Wilson,5,2167,Justin Wilson,wilsoju10,2162,Justin Williams,williju02,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-2167
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4678,Dan Winkler,5,2178,Dan Winkler,winklda01,1051,Ian Kinsler,kinslia01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-2178
|
||||
player+AF8-ambiguous+AF8-match,Player could match 7 different SbaPlayers,4355,Matt Wisler,5,2183,Matt Wisler,wislema01,167,Matt Belisle,belisma01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-2183
|
||||
player+AF8-ambiguous+AF8-match,Player could match 6 different SbaPlayers,4813,Brandon Workman,5,2198,Brandon Workman,workmbr01,249,Brandon Brennan,brennbr01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-2198
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4345,Ryan Yarbrough,5,2208,Ryan Yarbrough,yarbrry01,8,Bryan Abreu,abreubr01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-2208
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,4295,Kyle Zimmer,5,2228,Kyle Zimmer,zimmeky01,598,Kyle Farmer,farmeky01,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-2228
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4705,Tyler Zuber,5,2233,Tyler Zuber,zuberty01,717,Tyler Gilbert,gilbety01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-2233
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4278,Luis Robert,5,1660,Luis Robert,roberlu01,1467,Luis Ortiz,ortizlu03,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1660
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,4460,Tyler ONeill,5,1463,Tyler ONeill,oneilty01,1417,Tyler Nevin,nevinty01,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-1463
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,4271,Carlos Correa,5,420,Carlos Correa,correca01,331,Carlos Carrasco,carraca01,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-420
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4289,Brandon Crawford,5,430,Brandon Crawford,crawfbr01,2198,Brandon Workman,workmbr01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-430
|
||||
player+AF8-ambiguous+AF8-match,Player could match 10 different SbaPlayers,4217,Jose Ramirez,5,1608,Jose Ramirez,ramirjo01,1606,Noe Ramirez,ramirno01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1608
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,5056,Mike Zunino,5,2234,Mike Zunino,zuninmi01,1335,Mike Minor,minormi01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-2234
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4658,Marcus Semien,5,1799,Marcus Semien,semiema01,1928,Marcus Stroman,stromma01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1799
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,4264,Kyle Tucker,5,2023,Kyle Tucker,tuckeky01,2022,Cole Tucker,tuckeco01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-2023
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4287,Bryce Harper,5,823,Bryce Harper,harpebr03,824,Ryne Harper,harpery01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-823
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4639,Vladimir Guerrero Jr,5,789,Vladimir Guerrero Jr,guerrvl02,797,Vladimir Gutierrez,gutievl01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-789
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4274,Harrison Bader,5,110,Harrison Bader,baderha01,127,Addison Barger,bargead01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-110
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,1414,Jake Rogers,3,1692,Jake Rogers,rogerja03,283,Jake Burger,burgeja01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1692
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4273,Brandon Nimmo,5,1425,Brandon Nimmo,nimmobr01,1374,Brandon Morrow,morrobr01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1425
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,4618,Bryan Reynolds,5,1641,Bryan Reynolds,reynobr01,1639,Mark Reynolds,reynoma01,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-1641
|
||||
player+AF8-ambiguous+AF8-match,Player could match 9 different SbaPlayers,4803,Austin Riley,5,1649,Austin Riley,rileyau01,253,Austin Brice,briceau01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1649
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4233,Corey Seager,5,1794,Corey Seager,seageco01,1883,Cory Spangenberg,spangco01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1794
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4413,Starling Marte,5,1208,Starling Marte,martest01,348,Starlin Castro,castrst01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1208
|
||||
player+AF8-ambiguous+AF8-match,Player could match 9 different SbaPlayers,4168,Tim Anderson,5,73,Tim Anderson,anderti01,74,Ian Anderson,anderia01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-73
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4423,Matt Olson,5,1461,Matt Olson,olsonma02,2102,Matt Waldron,waldrma01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1461
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,5057,Mitch Garver,5,702,Mitch Garver,garvemi01,1500,Mitchell Parker,parkemi01,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-702
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4505,Willson Contreras,5,410,Willson Contreras,contrwi01,411,William Contreras,contrwi02,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-410
|
||||
player+AF8-ambiguous+AF8-match,Player could match 6 different SbaPlayers,4350,Enrique Hernandez,5,871,Enrique Hernandez,hernaen02,867,Felix Hernandez,hernafe02,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-871
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,4552,Christian Arroyo,5,96,Christian Arroyo,arroych01,406,Christian Colon,colonch01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-96
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4149,Manny Machado,5,1175,Manny Machado,machama01,1176,Andres Machado,machaan02,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1175
|
||||
player+AF8-ambiguous+AF8-match,Player could match 10 different SbaPlayers,4183,Brandon Lowe,5,1156,Brandon Lowe,lowebr01,116,Brandon Bailey,bailebr01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1156
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4392,Joey Gallo,5,674,Joey Gallo,gallojo01,321,Joey Cantillo,cantijo01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-674
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4715,Jorge Polanco,5,1570,Jorge Polanco,polanjo01,220,Jorge Bonifacio,bonifjo01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1570
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4733,Nicky Lopez,5,1149,Nicky Lopez,lopezni01,1143,Jack Lopez,lopezja03,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1149
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4225,Willy Adames,5,14,Willy Adames,adamewi01,17,Riley Adams,adamsri03,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-14
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4297,Joey Wendle,5,2135,Joey Wendle,wendljo01,2136,Joey Wentz,wentzjo01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-2135
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,5127,Steven Duggar,5,543,Steven Duggar,duggast01,1881,Steven Souza Jr,souzast01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-543
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4876,Dustin Garneau,5,697,Dustin Garneau,garnedu01,703,Justin Garza,garzaju01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-697
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4918,Hunter Renfroe,5,1631,Hunter Renfroe,renfrhu01,770,Hunter Greene,greenhu01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1631
|
||||
player+AF8-ambiguous+AF8-match,Player could match 7 different SbaPlayers,4159,Brandon Belt,5,173,Brandon Belt,beltbr01,195,Brandon Bielak,bielabr01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-173
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4304,Luis Arraez,5,93,Luis Arraez,arraelu01,138,Luis Barrera,barrelu01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-93
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4224,Trevor Story,5,1914,Trevor Story,storytr01,1248,Trevor May,maytr01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1914
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4198,George Springer,5,1888,George Springer,springe01,1873,George Soriano,soriage01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1888
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4181,Will D Smith,5,1841,Will Smith,smithwi05,1843,Will Smith,smithwi04,0.909,Choose correct match from 2 options,USE+AF8-SBA+AF8-1841
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4352,Ramon Laureano,5,1097,Ramon Laureano,laurera01,2037,Ramon Urias,uriasra01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1097
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,1748,Pablo Reyes,3,1637,Pablo Reyes,reyespa01,1635,Alex Reyes,reyesal02,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1637
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4771,Kyle Schwarber,5,1784,Kyle Schwarber,schwaky01,598,Kyle Farmer,farmeky01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1784
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4148,Freddie Freeman,5,652,Freddie Freeman,freemfr01,651,Mike Freeman,freemmi01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-652
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4383,Kolten Wong,5,2188,Kolten Wong,wongko01,2190,Kean Wong,wongke01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-2188
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4602,Ryan McMahon,5,1286,Ryan McMahon,mcmahry01,1180,Ryan Madson,madsory01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1286
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4356,Yan Gomes,5,731,Yan Gomes,gomesya01,728,Ryan Goins,goinsry01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-731
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4372,Ty France,5,642,Ty France,francty01,643,JP France,francjp01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-642
|
||||
player+AF8-ambiguous+AF8-match,Player could match 8 different SbaPlayers,4318,Teoscar Hernandez,5,873,Teoscar Hernandez,hernate01,870,Cesar Hernandez,hernace02,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-873
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4973,Jose Altuve,5,56,Jose Altuve,altuvjo01,59,Jose Alvarez,alvarjo02,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-56
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4553,Ramon Urias,5,2037,Ramon Urias,uriasra01,1716,Ramon Rosso,rossora01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-2037
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,4528,Danny Jansen,5,969,Danny Jansen,janseda01,130,Danny Barnes,barneda02,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-969
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4369,Alex Avila,5,104,Alex Avila,avilaal01,308,Alex Call,callal02,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-104
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4603,Adam Frazier,5,648,Adam Frazier,fraziad01,647,Todd Frazier,frazito01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-648
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,5011,Lewin Diaz,5,506,Lewin Diaz,diazle01,503,Edwin Diaz,diazed04,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-506
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4584,Evan Longoria,5,1140,Evan Longoria,longoev01,628,Estevan Florial,flories01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1140
|
||||
player+AF8-ambiguous+AF8-match,Player could match 7 different SbaPlayers,4248,Justin Turner,5,2029,Justin Turner,turneju01,226,Justin Bour,bourju01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-2029
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,1766,Rafael Ortega,3,1465,Rafael Ortega,ortegra01,1352,Rafael Montero,montera01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1465
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4249,Sean Murphy,5,1390,Sean Murphy,murphse01,1387,Daniel Murphy,murphda08,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1390
|
||||
player+AF8-ambiguous+AF8-match,Player could match 6 different SbaPlayers,4930,Jake Fraley,5,641,Jake Fraley,fraleja01,596,Jake Faria,fariaja01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-641
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4885,Elias Diaz,5,502,Elias Diaz,diazel01,509,Alexis Diaz,diazal03,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-502
|
||||
player+AF8-ambiguous+AF8-match,Player could match 6 different SbaPlayers,4524,Francisco Lindor,5,1124,Francisco Lindor,lindofr01,1126,Francisco Liriano,liriafr01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1124
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4472,Josh Donaldson,5,526,Josh Donaldson,donaljo02,1404,Josh Naylor,naylojo01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-526
|
||||
player+AF8-ambiguous+AF8-match,Player could match 12 different SbaPlayers,4354,Austin Hays,5,839,Austin Hays,haysau01,16,Austin Adams,adamsau02,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-839
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,4894,Francisco Mejia,5,1517,Francisco Pena,penafr01,87,Francisco Arcia,arciafr01,0.828,Choose correct match from 5 options,USE+AF8-SBA+AF8-1517
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,4805,Avisail Garcia,5,678,Avisail Garcia,garciav01,683,Aramis Garcia,garciar01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-678
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4941,Jason Castro,5,347,Jason Castro,castrja01,351,Anthony Castro,castran02,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-347
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4492,Nick Madrigal,5,1178,Nick Madrigal,madrini01,1230,Nick Martini,martini02,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1178
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4982,Josh Bell,5,168,Josh Bell,belljo02,20,Jo Adell,adelljo01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-168
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4747,Luis Urias,5,2039,Luis Urias,uriaslu01,658,Luis Frias,friaslu01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-2039
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4476,Tommy Edman,5,558,Tommy Edman,edmanto01,859,Tommy Henry,henryto01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-558
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,5136,Thairo Estrada,5,587,Thairo Estrada,estrath01,586,Marco Estrada,estrama01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-587
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4641,Rafael Devers,5,499,Rafael Devers,deverra01,523,Rafael Dolis,dolisra01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-499
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4947,Jesus Sanchez,5,1749,Jesus Sanchez,sanchje02,1939,Jesus Sucre,sucreje01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1749
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4878,Dylan Carlson,5,327,Dylan Carlson,carlsdy01,355,Dylan Cease,ceasedy01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-327
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,1994,Yordan Alvarez,3,61,Yordan Alvarez,alvaryo01,62,Francisco Alvarez,alvarfr01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-61
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4690,Aledmys Diaz,5,505,Aledmys Diaz,diazal02,509,Alexis Diaz,diazal03,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-505
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4888,Eric Haase,5,801,Eric Haase,haaseer01,926,Eric Hosmer,hosmeer01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-801
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4231,Michael Brantley,5,240,Michael Brantley,brantmi02,113,Michel Baez,baezmi01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-240
|
||||
player+AF8-ambiguous+AF8-match,Player could match 13 different SbaPlayers,4239,Brian Anderson,5,69,Brian Anderson,anderbr06,74,Ian Anderson,anderia01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-69
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4154,Miguel Rojas,5,1694,Miguel Rojas,rojasmi02,2055,Miguel Vargas,vargami01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1694
|
||||
player+AF8-ambiguous+AF8-match,Player could match 7 different SbaPlayers,4942,JD Martinez,5,1229,JD Martinez,martijd02,1222,Jose Martinez,martijo08,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1229
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4132,Tyler Stephenson,5,1905,Tyler Stephenson,stephty01,1904,Robert Stephenson,stephro01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1905
|
||||
player+AF8-ambiguous+AF8-match,Player could match 7 different SbaPlayers,4329,Austin Nola,5,1432,Austin Nola,nolaau01,427,Austin Cox,coxau01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1432
|
||||
player+AF8-ambiguous+AF8-match,Player could match 6 different SbaPlayers,4208,Austin Slater,5,1838,Austin Slater,slateau01,1837,Justin Slaten,slateju01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1838
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,1846,Seth Brown,3,265,Seth Brown,brownse01,166,Seth Beer,beerse01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-265
|
||||
player+AF8-ambiguous+AF8-match,Player could match 7 different SbaPlayers,4155,Jose Abreu,5,7,Jose Abreu,abreujo02,1937,Jose Suarez,suarejo01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-7
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,1704,Mitch Haniger,3,818,Mitch Haniger,hanigmi01,2143,Mitch White,whitemi03,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-818
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4787,Andrew Benintendi,5,177,Andrew Benintendi,beninan01,1065,Andrew Knizner,kniznan01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-177
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4202,Chris Taylor,5,1964,Chris Taylor,tayloch03,1739,Chris Sale,salech01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1964
|
||||
player+AF8-ambiguous+AF8-match,Player could match 6 different SbaPlayers,4177,Leury Garcia,5,679,Leury Garcia,garcile02,689,Rony Garcia,garciro03,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-679
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,1821,Ryan Zimmerman,3,2229,Ryan Zimmerman,zimmery01,2230,Jordan Zimmermann,zimmejo02,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-2229
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4547,Garrett Cooper,5,415,Garrett Cooper,coopega03,439,Garrett Crochet,crochga01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-415
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4385,Robbie Grossman,5,779,Robbie Grossman,grossro01,1620,Robbie Ray,rayro02,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-779
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4260,Nelson Cruz,5,447,Nelson Cruz,cruzne02,449,Oneil Cruz,cruzon01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-447
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4457,Max Kepler,5,1031,Max Kepler,keplema01,1314,Max Meyer,meyerma01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1031
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4881,Eduardo Escobar,5,581,Eduardo Escobar,escobed01,1738,Eduardo Salazar,salazed01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-581
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4361,Mark Canha,5,316,Mark Canha,canhama01,1234,Mark Mathias,mathima01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-316
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4403,Wilmer Flores,5,627,Wilmer Flores,florewi01,516,Wilmer Difo,difowi01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-627
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,5010,Lane Thomas,5,1978,Lane Thomas,thomala02,1979,Alek Thomas,thomaal01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1978
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4772,JD Davis,5,474,JD Davis,davisjd01,468,Wade Davis,daviswa01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-474
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4261,Andres Gimenez,5,721,Andres Gimenez,gimenan01,1384,Andres Munoz,munozan01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-721
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4508,Josh Harrison,5,829,Josh Harrison,harrijo05,831,Monte Harrison,harrimo01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-829
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,1177,Charlie Culberson,3,453,Charlie Culberson,culbech01,1991,Charlie Tilson,tilsoch01,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-453
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,1740,Odubel Herrera,3,882,Odubel Herrera,herreod01,883,Rosell Herrera,herrero02,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-882
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4197,Alex Verdugo,5,2069,Alex Verdugo,verdual01,591,Alex Faedo,faedoal01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-2069
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4667,Bradley Zimmer,5,2227,Bradley Zimmer,zimmebr01,2228,Kyle Zimmer,zimmeky01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-2227
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4333,Kyle Lewis,5,1118,Kyle Lewis,lewisky01,1119,Royce Lewis,lewisro02,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1118
|
||||
player+AF8-ambiguous+AF8-match,Player could match 8 different SbaPlayers,4964,Jonathan Villar,5,2079,Jonathan Villar,villajo01,84,Jonathan Arauz,arauzjo01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-2079
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,4713,Austin Meadows,5,1290,Austin Meadows,meadoau01,16,Austin Adams,adamsau02,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1290
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4786,Amed Rosario,5,1711,Amed Rosario,rosaram01,1710,Eddie Rosario,rosared01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1711
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4306,Donovan Solano,5,1868,Donovan Solano,solando01,2113,Donovan Walton,waltodo01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1868
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4375,Starlin Castro,5,348,Starlin Castro,castrst01,349,Harold Castro,castrha01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-348
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4965,Jordan Luplow,5,1168,Jordan Luplow,luplojo01,917,Jordan Holloway,hollojo01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1168
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,4391,Eloy Jimenez,5,980,Eloy Jimenez,jimenel02,982,Leo Jimenez,jimenle01,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-980
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4406,Ian Happ,5,820,Ian Happ,happia01,821,JA Happ,happja01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-820
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,4348,Jonathan Schoop,5,1779,Jonathan Schoop,schoojo01,318,Jonathan Cannon,cannojo02,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-1779
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4808,Billy Hamilton,5,810,Billy Hamilton,hamilbi02,811,Ian Hamilton,hamilia01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-810
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,4418,Yandy Diaz,5,507,Yandy Diaz,diazya01,511,Yainer Diaz,diazya02,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-507
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,4556,Kyle Seager,5,1793,Kyle Seager,seageky01,598,Kyle Farmer,farmeky01,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-1793
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4483,Adalberto Mondesi,5,1349,Adalberto Mondesi,mondera02,1296,Adalberto Mejia,mejiaad01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1349
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,4525,Anthony Rizzo,5,1658,Anthony Rizzo,rizzoan01,351,Anthony Castro,castran02,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1658
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,4285,David Fletcher,5,624,David Fletcher,fletcda02,625,Dominic Fletcher,fletcdo01,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-624
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,4793,Anthony Alford,5,41,Anthony Alford,alforan01,121,Anthony Banda,bandaan01,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-41
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,5021,Luis Torrens,5,2002,Luis Torrens,torrelu01,1240,Luis Matos,matoslu02,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-2002
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4481,Eddie Rosario,5,1710,Eddie Rosario,rosared01,1711,Amed Rosario,rosaram01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1710
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4236,Luis Guillorme,5,792,Luis Guillorme,guilllu01,716,Luis Gil,gillu01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-792
|
||||
player+AF8-ambiguous+AF8-match,Player could match 6 different SbaPlayers,5134,Taylor Ward,5,2116,Taylor Ward,wardta01,844,Taylor Hearn,hearnta01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-2116
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4745,Sam Hilliard,5,903,Sam Hilliard,hillisa01,929,Sam Howard,howarsa01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-903
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,4665,Christian Yelich,5,2212,Christian Yelich,yelicch01,1482,Cristian Pache,pachecr01,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-2212
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,4167,Dylan Moore,5,1358,Dylan Moore,mooredy01,425,Dylan Covey,coveydy01,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-1358
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,4590,Jace Peterson,5,1547,Jace Peterson,peterja01,1514,Joc Pederson,pederjo01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1547
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,4812,Brandon Drury,5,535,Brandon Drury,drurybr01,2196,Brandon Woodruff,woodrbr01,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-535
|
||||
player+AF8-ambiguous+AF8-match,Player could match 6 different SbaPlayers,4323,Kyle Farmer,5,598,Kyle Farmer,farmeky01,597,Buck Farmer,farmebu01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-598
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,4506,Brett Gardner,5,695,Brett Gardner,gardnbr01,66,Brett Anderson,anderbr04,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-695
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4949,Jo Adell,5,20,Jo Adell,adelljo01,168,Josh Bell,belljo02,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-20
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4462,Pedro Severino,5,1804,Pedro Severino,severpe01,1929,Pedro Strop,stroppe01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1804
|
||||
player+AF8-ambiguous+AF8-match,Player could match 11 different SbaPlayers,4425,Tyler Wade,5,2094,Tyler Wade,wadety01,2125,Tyler Webb,webbty01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-2094
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,4624,David Peralta,5,1522,David Peralta,peralda01,611,David Festa,festada01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1522
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4371,Ryan Jeffers,5,975,Ryan Jeffers,jeffery01,2128,Ryan Weber,weberry01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-975
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,4480,Christian Vazquez,5,2063,Christian Vazquez,vazquch01,2078,Christian Villanueva,villach01,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-2063
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,5117,Sergio Alcantara,5,34,Sergio Alcantara,alcanse01,35,Sandy Alcantara,alcansa01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-34
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,5070,Nick Solak,5,1867,Nick Solak,solakni01,1866,Nick Sogard,sogarni01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1867
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,5050,Miguel Sano,5,1757,Miguel Sano,sanomi01,1750,Miguel Sanchez,sanchmi01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1757
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,5097,Robinson Chirinos,5,373,Robinson Chirinos,chiriro01,319,Robinson Cano,canoro01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-373
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4331,Eric Hosmer,5,926,Eric Hosmer,hosmeer01,801,Eric Haase,haaseer01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-926
|
||||
player+AF8-ambiguous+AF8-match,Player could match 17 different SbaPlayers,4349,Austin Barnes,5,132,Austin Barnes,barneau01,253,Austin Brice,briceau01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-132
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,5153,Tyler Naquin,5,1399,Tyler Naquin,naquity01,103,Tyler Austin,austity01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1399
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,4594,Charlie Blackmon,5,205,Charlie Blackmon,blackch02,134,Charlie Barnes,barnech01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-205
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4201,Michael Conforto,5,407,Michael Conforto,confomi01,1875,Michael Soroka,sorokmi01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-407
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4309,Nick Ahmed,5,26,Nick Ahmed,ahmedni01,1605,Nick Ramirez,ramirni01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-26
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,4988,Josh Rojas,5,1695,Josh Rojas,rojasjo01,1696,Jose Rojas,rojasjo02,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1695
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4899,Garrett Hampson,5,814,Garrett Hampson,hampsga01,1645,Garrett Richards,richaga01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-814
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4880,Eddy Alvarez,5,60,Eddy Alvarez,alvared01,59,Jose Alvarez,alvarjo02,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-60
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,5016,Luis V Garcia,5,694,Luis Garcia Jr,garcilu04,690,Adolis Garcia,garciad02,0.815,Choose correct match from 4 options,USE+AF8-SBA+AF8-694
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,1991,Yonathan Daza,3,476,Yonathan Daza,dazayo01,84,Jonathan Arauz,arauzjo01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-476
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,4984,Josh Naylor,5,1404,Josh Naylor,naylojo01,1967,Josh Taylor,taylojo02,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-1404
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4739,Asdrubal Cabrera,5,299,Asdrubal Cabrera,cabreas01,303,Oswaldo Cabrera,cabreos01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-299
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,1514,Jose Rondon,3,1707,Jose Rondon,rondojo02,1450,Joseph Odom,odomjo01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1707
|
||||
player+AF8-ambiguous+AF8-match,Player could match 8 different SbaPlayers,4619,Christian Walker,5,2104,Christian Walker,walkech02,971,Cristian Javier,javiecr01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-2104
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,4453,Brad Miller,5,1322,Brad Miller,millebr02,1016,Brad Keller,kellebr01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1322
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,5006,Kyle Garlick,5,696,Kyle Garlick,garliky01,435,Kyle Crick,crickky01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-696
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,5132,Taylor Jones,5,992,Taylor Jones,jonesta01,1689,Taylor Rogers,rogerta01,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-992
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,5000,Kevin Newman,5,1420,Kevin Newman,newmake01,706,Kevin Gausman,gausmke01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1420
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4740,Corey Dickerson,5,513,Corey Dickerson,dickeco01,512,Alex Dickerson,dickeal01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-513
|
||||
player+AF8-ambiguous+AF8-match,Player could match 13 different SbaPlayers,4342,Cesar Hernandez,5,870,Cesar Hernandez,hernace02,880,Carlos Hernandez,hernaca04,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-870
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4647,Victor Reyes,5,1638,Victor Reyes,reyesvi01,1666,Victor Robles,roblevi01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1638
|
||||
player+AF8-ambiguous+AF8-match,Player could match 6 different SbaPlayers,4191,Anthony Santander,5,1764,Anthony Santander,santaan02,176,Anthony Bender,bendean01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1764
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4128,Andrew Stevenson,5,1906,Andrew Stevenson,stevean01,1907,Cal Stevenson,steveca01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1906
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4365,Bobby Dalbec,5,458,Bobby Dalbec,dalbebo01,237,Bobby Bradley,bradlbo01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-458
|
||||
player+AF8-ambiguous+AF8-match,Player could match 11 different SbaPlayers,5164,Yadiel Hernandez,5,875,Yadiel Hernandez,hernaya01,867,Felix Hernandez,hernafe02,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-875
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,4555,Jose Trevino,5,2013,Jose Trevino,trevijo01,1973,Jose Tena,tenajo01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-2013
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,1360,Harold Ramirez,3,1609,Harold Ramirez,ramirha02,1611,Yohan Ramirez,ramiryo01,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-1609
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4792,Andy Young,5,2220,Andy Young,youngan02,2218,Danny Young,youngda02,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-2220
|
||||
player+AF8-ambiguous+AF8-match,Player could match 7 different SbaPlayers,4804,Austin Romine,5,1704,Austin Romine,rominau01,253,Austin Brice,briceau01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1704
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,5069,Nick Senzel,5,1802,Nick Senzel,senzeni01,1410,Nick Nelson,nelsoni01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1802
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4561,Willi Castro,5,352,Willi Castro,castrwi01,350,Miguel Castro,castrmi01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-352
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,1535,Juan Lagares,3,1083,Juan Lagares,lagarju01,24,Julian Aguiar,aguiaju01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1083
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4969,Jorge Alfaro,5,40,Jorge Alfaro,alfarjo01,32,Jorge Alcala,alcaljo01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-40
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,5002,Khris Davis,5,469,Khris Davis,daviskh01,467,Chris Davis,davisch02,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-469
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4244,Jose Iglesias,5,949,Jose Iglesias,iglesjo01,950,Raisel Iglesias,iglesra01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-949
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4687,Jorge Soler,5,1870,Jorge Soler,solerjo01,1144,Jorge Lopez,lopezjo02,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1870
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,5155,Victor Caratini,5,325,Victor Caratini,caratvi01,83,Victor Arano,aranovi01,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-325
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,5162,Willie Calhoun,5,307,Willie Calhoun,calhowi01,306,Kole Calhoun,calhoko01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-307
|
||||
player+AF8-ambiguous+AF8-match,Player could match 9 different SbaPlayers,4736,Marwin Gonzalez,5,741,Marwin Gonzalez,gonzama01,738,Adrian Gonzalez,gonzaad01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-741
|
||||
player+AF8-ambiguous+AF8-match,Player could match 10 different SbaPlayers,4767,Erik Gonzalez,5,742,Erik Gonzalez,gonzaer01,739,Gio Gonzalez,gonzagi01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-742
|
||||
player+AF8-ambiguous+AF8-match,Player could match 8 different SbaPlayers,5043,Michael Chavis,5,371,Michael Chavis,chavimi01,827,Michael Harris,harrimi04,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-371
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4501,Maikel Franco,5,645,Maikel Franco,francma02,651,Mike Freeman,freemmi01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-645
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,1553,Kelvin Gutierrez,3,796,Kelvin Gutierrez,gutieke01,881,Kelvin Herrera,herreke01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-796
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,5123,Stephen Piscotty,5,1563,Stephen Piscotty,piscost01,2086,Stephen Vogt,vogtst01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1563
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4950,Joc Pederson,5,1514,Joc Pederson,pederjo01,1547,Jace Peterson,peterja01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1514
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4161,James McCann,5,1261,James McCann,mccanja02,1477,James Outman,outmaja01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1261
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,1782,Richie Martin,3,1216,Richie Martin,martiri01,1214,Chris Martin,martich02,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-1216
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4730,Orlando Arcia,5,86,Orlando Arcia,arciaor01,685,Bryan Garcia,garcibr01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-86
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,4979,Jose Peraza,5,1527,Jose Peraza,perazjo01,1528,Oswald Peraza,perazos02,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1527
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4587,Aaron Hicks,5,892,Aaron Hicks,hicksaa01,893,John Hicks,hicksjo02,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-892
|
||||
player+AF8-ambiguous+AF8-match,Player could match 6 different SbaPlayers,4995,Justin Upton,5,2034,Justin Upton,uptonju01,546,Justin Dunn,dunnju01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-2034
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4499,Pavin Smith,5,1851,Pavin Smith,smithpa04,1854,Kevin Smith,smithke05,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1851
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4653,Phillip Evans,5,589,Phillip Evans,evansph01,2047,Phillips Valdez,valdeph01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-589
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4564,Carlos Santana,5,1759,Carlos Santana,santaca01,1763,Edgar Santana,santaed01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1759
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,5073,Niko Goodrum,5,748,Niko Goodrum,goodrni01,750,Nick Goody,goodyni01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-748
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4681,Roberto Perez,5,1538,Roberto Perez,perezro02,1938,Robert Suarez,suarero01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1538
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,1972,Wilmer Difo,3,516,Wilmer Difo,difowi01,634,Wilmer Font,fontwi01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-516
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,1093,Austin Wynns,3,2202,Austin Wynns,wynnsau01,839,Austin Hays,haysau01,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-2202
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4758,David Bote,5,224,David Bote,boteda01,162,David Bednar,bednada01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-224
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,5120,Shed Long,5,1138,Shed Long,longsh01,1139,Sam Long,longsa01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1138
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,5048,Miguel Andujar,5,78,Miguel Andujar,andujmi01,1757,Miguel Sano,sanomi01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-78
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,1405,Jake Bauers,3,151,Jake Bauers,bauerja01,283,Jake Burger,burgeja01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-151
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,5049,Miguel Cabrera,5,298,Miguel Cabrera,cabremi01,300,Melky Cabrera,cabreme01,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-298
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4443,Martin Maldonado,5,1187,Martin Maldonado,maldoma01,1582,Martin Prado,pradoma01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1187
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4931,Jake Lamb,5,1087,Jake Lamb,lambja01,57,Jake Alu,aluja01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1087
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,4438,Harold Castro,5,349,Harold Castro,castrha01,348,Starlin Castro,castrst01,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-349
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,4539,Andrew Velazquez,5,2067,Andrew Velazquez,velazan01,2059,Andrew Vasquez,vasquan02,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-2067
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4890,Eric Sogard,5,1865,Eric Sogard,sogarer01,1866,Nick Sogard,sogarni01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1865
|
||||
player+AF8-ambiguous+AF8-match,Player could match 6 different SbaPlayers,4232,Anthony Rendon,5,1630,Anthony Rendon,rendoan01,176,Anthony Bender,bendean01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1630
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,5125,Stephen Vogt,5,2086,Stephen Vogt,vogtst01,1430,Stephen Nogosek,nogosst01,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-2086
|
||||
player+AF8-ambiguous+AF8-match,Player could match 6 different SbaPlayers,4802,Austin Hedges,5,848,Austin Hedges,hedgeau01,839,Austin Hays,haysau01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-848
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4638,Carter Kieboom,5,1038,Carter Kieboom,kieboca01,1037,Spencer Kieboom,kiebosp01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1038
|
||||
player+AF8-ambiguous+AF8-match,Player could match 7 different SbaPlayers,4963,Jonathan Arauz,5,84,Jonathan Arauz,arauzjo01,82,Jonathan Aranda,arandjo01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-84
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4422,Kole Calhoun,5,306,Kole Calhoun,calhoko01,307,Willie Calhoun,calhowi01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-306
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4382,DJ Stewart,5,1909,DJ Stewart,stewadj01,1911,Kohl Stewart,stewako01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1909
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4186,Clint Frazier,5,649,Clint Frazier,frazicl01,647,Todd Frazier,frazito01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-649
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,5156,Victor Robles,5,1666,Victor Robles,roblevi01,1638,Victor Reyes,reyesvi01,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-1666
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,2045,Alex Blandino,1,210,Alex Blandino,blandal01,387,Alex Claudio,claudal01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-210
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,4613,Colin Moran,5,1360,Colin Moran,moranco01,1621,Colin Rea,reaco01,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-1360
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,4907,Gregory Polanco,5,1569,Gregory Polanco,polangr01,207,Gregor Blanco,blancgr01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1569
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,4923,Isan Diaz,5,508,Isan Diaz,diazis01,502,Elias Diaz,diazel01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-508
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4575,Rio Ruiz,5,1723,Rio Ruiz,ruizri01,1724,Jose Ruiz,ruizjo01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1723
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4206,Jackie Bradley Jr,5,239,Jackie Bradley Jr,bradlja02,236,Archie Bradley,bradlar01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-239
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4855,Daniel Vogelbach,5,2085,Daniel Vogelbach,vogelda01,1172,Daniel Lynch,lynchda02,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-2085
|
||||
player+AF8-ambiguous+AF8-match,Player could match 6 different SbaPlayers,4856,Danny Santana,5,1760,Danny Santana,santada01,1762,Dennis Santana,santade01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1760
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,4484,Alex Dickerson,5,512,Alex Dickerson,dickeal01,961,Alex Jackson,jacksal02,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-512
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4884,Eli White,5,2140,Eli White,whiteel04,2142,Evan White,whiteev01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-2140
|
||||
player+AF8-ambiguous+AF8-match,Player could match 13 different SbaPlayers,5046,Michael Perez,5,1539,Michael Perez,perezmi03,1546,Michael Petersen,petermi01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1539
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4854,Daniel Robertson,5,1663,Daniel Robertson,roberda10,1662,David Robertson,roberda08,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1663
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4768,Evan White,5,2142,Evan White,whiteev01,2144,Brendan White,whitebr01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-2142
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4843,Cole Tucker,5,2022,Cole Tucker,tuckeco01,2023,Kyle Tucker,tuckeky01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-2022
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,4858,David Dahl,5,457,David Dahl,dahlda01,805,David Hale,haleda02,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-457
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,5079,Pablo Sandoval,5,1753,Pablo Sandoval,sandopa01,1754,Patrick Sandoval,sandopa02,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1753
|
||||
player+AF8-ambiguous+AF8-match,Player could match 9 different SbaPlayers,4158,Jonathan Davis,5,470,Jonathan Davis,davisjo05,953,Jonathan India,indiajo01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-470
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4279,Kevan Smith,5,1847,Kevan Smith,smithke04,1854,Kevin Smith,smithke05,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1847
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,2063,Andrew Romine,1,1703,Andrew Romine,rominan01,1320,Andrew Miller,millean01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1703
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,5055,Mike Tauchman,5,1961,Mike Tauchman,tauchmi01,152,Mike Baumann,baumami01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1961
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4593,Jake Cave,5,354,Jake Cave,caveja01,1274,Jake McGee,mcgeeja01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-354
|
||||
player+AF8-ambiguous+AF8-match,Player could match 8 different SbaPlayers,1788,Robel Garcia,3,682,Robel Garcia,garciro02,692,Robert Garcia,garciro04,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-682
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4953,Joe Panik,5,1493,Joe Panik,panikjo01,1732,Joe Ryan,ryanjo04,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1493
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4439,JaCoby Jones,5,991,JaCoby Jones,jonesja07,133,Jacob Barnes,barneja01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-991
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4761,Matt Carpenter,5,329,Matt Carpenter,carpema01,328,Ryan Carpenter,carpery01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-329
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,4789,Andrew Knizner,5,1065,Andrew Knizner,kniznan01,1320,Andrew Miller,millean01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1065
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,5051,Mike Ford,5,635,Mike Ford,fordmi01,615,Mike Fiers,fiersmi01,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-635
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,1871,Stevie Wilkerson,3,2153,Stevie Wilkerson,wilkest01,2169,Steven Wilson,wilsost02,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-2153
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4283,Andrew Knapp,5,1062,Andrew Knapp,knappan01,1400,Andrew Nardi,nardian01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1062
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4780,Adrian Morejon,5,1363,Adrian Morejon,morejad01,1362,Brian Moran,moranbr01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1363
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,4760,Anibal Sanchez,5,1743,Anibal Sanchez,sanchan01,1747,Ali Sanchez,sanchal04,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-1743
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,1088,Austin Pruitt,3,1588,Austin Pruitt,pruitau01,253,Austin Brice,briceau01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1588
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4677,Caleb Ferguson,5,605,Caleb Ferguson,ferguca01,604,Tyler Ferguson,ferguty01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-605
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,1184,Chris Archer,3,85,Chris Archer,archech01,1739,Chris Sale,salech01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-85
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4621,Cionel Perez,5,1540,Cionel Perez,perezci01,1539,Michael Perez,perezmi03,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1540
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4477,Dakota Hudson,5,934,Dakota Hudson,hudsoda02,108,Dakota Bacus,bacusda01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-934
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4330,Daniel Castano,5,337,Daniel Castano,castada01,492,Daniel Descalso,descada01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-337
|
||||
player+AF8-ambiguous+AF8-match,Player could match 6 different SbaPlayers,4694,David Phelps,5,1554,David Phelps,phelpda01,889,David Hess,hessda01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1554
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,2222,David Robertson,1,1662,David Robertson,roberda08,1663,Daniel Robertson,roberda10,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-1662
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4860,Dee Strange Gordon,5,1920,Dee Strange Gordon,gordode01,753,Tanner Gordon,gordota01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1920
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4284,Dustin May,5,1249,Dustin May,maydu01,839,Austin Hays,haysau01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1249
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4601,Greg Allen,5,44,Greg Allen,allengr01,915,Greg Holland,hollagr01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-44
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4912,Hoby Milner,5,1332,Hoby Milner,milneho01,1326,Bobby Miller,millebo06,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1332
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,4718,Jason Adam,5,13,Jason Adam,adamja01,16,Austin Adams,adamsau02,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-13
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4566,Jimmy Herget,5,863,Jimmy Herget,hergeji01,1089,Jimmy Lambert,lambeji01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-863
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4625,Joey Bart,5,142,Joey Bart,bartjo01,129,Joe Barlow,barlojo01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-142
|
||||
player+AF8-ambiguous+AF8-match,Player could match 6 different SbaPlayers,4513,Jonathan Hernandez,5,876,Jonathan Hernandez,hernajo02,82,Jonathan Aranda,arandjo01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-876
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,1490,Jordan Hicks,3,894,Jordan Hicks,hicksjo03,2148,Jordan Wicks,wicksjo01,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-894
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,4558,Jordan Weems,5,2129,Jordan Weems,weemsjo01,1171,Jordan Lyles,lylesjo01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-2129
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,3862,Josh Smith,4,1852,Josh Smith,smithjo11,1842,Joe Smith,smithjo05,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1852
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,1550,Justin Verlander,3,2071,Justin Verlander,verlaju01,70,Justin Anderson,anderju01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-2071
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4671,Kyle Wright,5,2200,Kyle Wright,wrighky01,2199,Mike Wright,wrighmi01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-2200
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,1616,Luke Maile,3,1185,Luke Maile,mailelu01,1602,Luke Raley,raleylu01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1185
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,1623,Manny Banuelos,3,123,Manny Banuelos,banuema01,130,Danny Barnes,barneda02,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-123
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,5027,Mark Mathias,5,1234,Mark Mathias,mathima01,316,Mark Canha,canhama01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1234
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,4469,Matt Strahm,5,1918,Matt Strahm,strahma01,241,Matt Brash,brashma01,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-1918
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,5067,Nick Nelson,5,1410,Nick Nelson,nelsoni01,71,Nick Anderson,anderni01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1410
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4407,Robinson Cano,5,319,Robinson Cano,canoro01,373,Robinson Chirinos,chiriro01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-319
|
||||
player+AF8-ambiguous+AF8-match,Player could match 10 different SbaPlayers,5099,Rony Garcia,5,689,Rony Garcia,garciro03,693,Rico Garcia,garciri01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-689
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4386,Ryan Borucki,5,222,Ryan Borucki,borucry01,244,Ryan Braun,braunry02,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-222
|
||||
player+AF8-ambiguous+AF8-match,Player could match 6 different SbaPlayers,4581,Ryan Brasier,5,242,Ryan Brasier,brasiry01,117,Bryan Baker,bakerbr01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-242
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,2954,Seranthony Dominguez,1,524,Seranthony Dominguez,dominse01,525,Jasson Dominguez,dominja01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-524
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,1927,Tyler Beede,3,164,Tyler Beede,beedety01,2094,Tyler Wade,wadety01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-164
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,4669,Tyler Heineman,5,851,Tyler Heineman,heinety01,654,Tyler Freeman,freemty01,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-851
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,3023,Victor Arano,1,83,Victor Arano,aranovi01,325,Victor Caratini,caratvi01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-83
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,1138,Brock Stewart,3,1908,Brock Stewart,stewabr01,1911,Kohl Stewart,stewako01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1908
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4844,Colin Rea,5,1621,Colin Rea,reaco01,1360,Colin Moran,moranco01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1621
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,1263,Derek Law,3,1098,Derek Law,lawde01,899,Derek Hill,hillde01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1098
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4937,James Paxton,5,1506,James Paxton,paxtoja01,1509,James Pazos,pazosja01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1506
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,2804,Matt Koch,1,1066,Matt Koch,kochma01,1835,Matt Skole,skolema01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1066
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,5062,Nate Pearson,5,1513,Nate Pearson,pearsna01,557,Nate Eaton,eatonna01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1513
|
||||
player+AF8-ambiguous+AF8-match,Player could match 11 different SbaPlayers,4164,Nick Anderson,5,71,Nick Anderson,anderni01,1410,Nick Nelson,nelsoni01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-71
|
||||
player+AF8-ambiguous+AF8-match,Player could match 6 different SbaPlayers,5068,Nick Ramirez,5,1605,Nick Ramirez,ramirni01,1603,Neil Ramirez,ramirne01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1605
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4620,Scott Alexander,5,36,Scott Alexander,alexasc02,38,Jason Alexander,alexaja01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-36
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,1854,Shelby Miller,3,1323,Shelby Miller,millesh01,1332,Hoby Milner,milneho01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1323
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,1897,Tommy Kahnle,3,1006,Tommy Kahnle,kahnlto01,1398,Tommy Nance,nanceto01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1006
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,1187,Chris Devenski,3,498,Chris Devenski,devench02,467,Chris Davis,davisch02,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-498
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,1432,Jay Jackson,3,959,Jay Jackson,jacksja01,961,Alex Jackson,jacksal02,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-959
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4467,Carson Fulmer,5,667,Carson Fulmer,fulmeca01,279,Aaron Bummer,bummeaa01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-667
|
||||
player+AF8-ambiguous+AF8-match,Player could match 12 different SbaPlayers,1544,Justin Anderson,3,70,Justin Anderson,anderju01,73,Tim Anderson,anderti01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-70
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,1646,Matt Bowman,3,228,Matt Bowman,bowmama01,131,Matt Barnes,barnema01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-228
|
||||
player+AF8-ambiguous+AF8-match,Player could match 10 different SbaPlayers,1724,Nick Martini,3,1230,Nick Martini,martini02,1224,Nick Martinez,martini01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1230
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4170,Sixto Sanchez,5,1751,Sixto Sanchez,sanchsi01,1747,Ali Sanchez,sanchal04,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1751
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4347,Yonny Chirinos,5,374,Yonny Chirinos,chiriyo01,373,Robinson Chirinos,chiriro01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-374
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,1010,Aaron Altherr,3,55,Aaron Altherr,altheaa01,383,Aaron Civale,civalaa01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-55
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,1022,Adam Conley,3,409,Adam Conley,conlead01,989,Adam Jones,jonesad01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-409
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,1028,Adam Jones,3,989,Adam Jones,jonesad01,409,Adam Conley,conlead01,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-989
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4388,Adam Kolarek,5,1069,Adam Kolarek,kolarad01,1459,Adam Oller,ollerad01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1069
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,1034,Adam Warren,3,2118,Adam Warren,warread01,2119,Art Warren,warrear01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-2118
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,2034,Addison Reed,1,1624,Addison Reed,reedad01,127,Addison Barger,bargead01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1624
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,1035,Addison Russell,3,1728,Addison Russell,russead02,1624,Addison Reed,reedad01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1728
|
||||
player+AF8-ambiguous+AF8-match,Player could match 8 different SbaPlayers,2038,Adrian Gonzalez,1,738,Adrian Gonzalez,gonzaad01,741,Marwin Gonzalez,gonzama01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-738
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4781,Albert Almora,5,51,Albert Almora Jr,almoral01,63,Adbert Alzolay,alzolad01,0.897,Choose correct match from 3 options,USE+AF8-SBA+AF8-51
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4764,Alex Gordon,5,751,Alex Gordon,gordoal01,753,Tanner Gordon,gordota01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-751
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,2051,Alex Wilson,1,2168,Alex Wilson,wilsoal01,512,Alex Dickerson,dickeal01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-2168
|
||||
player+AF8-ambiguous+AF8-match,Player could match 6 different SbaPlayers,1057,Andrew Cashner,3,336,Andrew Cashner,cashnan01,363,Andrew Chafin,chafian01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-336
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,4442,Andrew Suarez,5,1935,Andrew Suarez,suarean01,2059,Andrew Vasquez,vasquan02,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1935
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,1071,Anthony Swarzak,3,1950,Anthony Swarzak,swarzan01,121,Anthony Banda,bandaan01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1950
|
||||
player+AF8-ambiguous+AF8-match,Player could match 7 different SbaPlayers,2080,Austin Jackson,1,958,Austin Jackson,jacksau01,427,Austin Cox,coxau01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-958
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,2096,Bobby Wilson,1,2166,Bobby Wilson,wilsobo02,2171,Bryse Wilson,wilsobr02,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-2166
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,1110,Brad Peacock,3,1510,Brad Peacock,peacobr01,1511,Matt Peacock,peacoma01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1510
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,2102,Brad Ziegler,1,2226,Brad Ziegler,zieglbr01,1016,Brad Keller,kellebr01,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-2226
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,1116,Brandon Dixon,3,520,Brandon Dixon,dixonbr01,1425,Brandon Nimmo,nimmobr01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-520
|
||||
player+AF8-ambiguous+AF8-match,Player could match 7 different SbaPlayers,2106,Brandon Guyer,1,798,Brandon Guyer,guyerbr01,1246,Brandon Maurer,maurebr01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-798
|
||||
player+AF8-ambiguous+AF8-match,Player could match 9 different SbaPlayers,2108,Brandon Maurer,1,1246,Brandon Maurer,maurebr01,798,Brandon Guyer,guyerbr01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1246
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,2109,Brandon McCarthy,1,1263,Brandon McCarthy,mccarbr01,1205,Brandon Marsh,marshbr02,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1263
|
||||
player+AF8-ambiguous+AF8-match,Player could match 6 different SbaPlayers,2110,Brandon Morrow,1,1374,Brandon Morrow,morrobr01,1246,Brandon Maurer,maurebr01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1374
|
||||
player+AF8-ambiguous+AF8-match,Player could match 6 different SbaPlayers,1134,Brian Johnson,3,986,Brian Johnson,johnsbr02,987,Bryce Johnson,johnsbr03,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-986
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,1135,Brian McCann,3,1260,Brian McCann,mccanbr01,1362,Brian Moran,moranbr01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1260
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4821,Bryan Holaday,5,911,Bryan Holaday,holadbr01,1427,Ryan Noda,nodary01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-911
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,2124,Bryan Mitchell,1,1339,Bryan Mitchell,mitchbr01,1341,Calvin Mitchell,mitchca01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1339
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,2132,Caleb Joseph,1,996,Caleb Joseph,josepca01,997,Corban Joseph,josepco01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-996
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,1158,Carlos Gomez,3,732,Carlos Gomez,gomezca01,740,Carlos Gonzalez,gonzaca01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-732
|
||||
player+AF8-ambiguous+AF8-match,Player could match 12 different SbaPlayers,1159,Carlos Gonzalez,3,740,Carlos Gonzalez,gonzaca01,744,Oscar Gonzalez,gonzaos01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-740
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,1179,Charlie Tilson,3,1991,Charlie Tilson,tilsoch01,1375,Charlie Morton,mortoch02,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1991
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,2160,Chasen Bradford,1,234,Chasen Bradford,bradfch02,233,Cody Bradford,bradfco01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-234
|
||||
player+AF8-ambiguous+AF8-match,Player could match 7 different SbaPlayers,4837,Chris Davis,5,467,Chris Davis,davisch02,469,Khris Davis,daviskh01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-467
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,2169,Chris Rusin,1,1727,Chris Rusin,rusinch01,1214,Chris Martin,martich02,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1727
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,2175,Christian Villanueva,1,2078,Christian Villanueva,villach01,2063,Christian Vazquez,vazquch01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-2078
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,1203,Clayton Richard,3,1644,Clayton Richard,richacl01,1034,Clayton Kershaw,kershcl01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1644
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4841,Cody Reed,5,1625,Cody Reed,reedco01,1860,Cy Sneed,sneedcy01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1625
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,1220,Cory Spangenberg,3,1883,Cory Spangenberg,spangco01,1794,Corey Seager,seageco01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1883
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,2197,Dan Jennings,1,977,Dan Jennings,jennida01,548,Dane Dunning,dunnida01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-977
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,1229,Daniel Descalso,3,492,Daniel Descalso,descada01,337,Daniel Castano,castada01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-492
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4852,Daniel Murphy,5,1387,Daniel Murphy,murphda08,1390,Sean Murphy,murphse01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1387
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,1234,Daniel Palka,3,1491,Daniel Palka,palkada01,1490,Daniel Palencia,palenda01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1491
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,2208,Danny Barnes,1,130,Danny Barnes,barneda02,123,Manny Banuelos,banuema01,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-130
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,2211,Danny Valencia,1,2050,Danny Valencia,valenda01,1490,Daniel Palencia,palenda01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-2050
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,1248,David Freese,3,655,David Freese,freesda01,656,David Freitas,freitda01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-655
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,2217,David Freitas,1,656,David Freitas,freitda01,611,David Festa,festada01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-656
|
||||
player+AF8-ambiguous+AF8-match,Player could match 8 different SbaPlayers,1250,David Hernandez,3,868,David Hernandez,hernada01,875,Yadiel Hernandez,hernaya01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-868
|
||||
player+AF8-ambiguous+AF8-match,Player could match 6 different SbaPlayers,1251,David Hess,3,889,David Hess,hessda01,1554,David Phelps,phelpda01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-889
|
||||
player+AF8-ambiguous+AF8-match,Player could match 11 different SbaPlayers,1259,Dereck Rodriguez,3,1676,Dereck Rodriguez,rodride01,1677,Jefry Rodriguez,rodrije01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1676
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,4869,Domingo Santana,5,1761,Domingo Santana,santado01,1956,Domingo Tapia,tapiado01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1761
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,4879,Dylan Covey,5,425,Dylan Covey,coveydy01,401,Dylan Coleman,colemdy01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-425
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,1291,Eduardo Nunez,3,1442,Eduardo Nunez,nunezed02,1675,Eduardo Rodriguez,rodried05,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-1442
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,2256,Edubray Ramos,1,1613,Edubray Ramos,ramosed02,1614,Henry Ramos,ramoshe01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1613
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4883,Edwin Encarnacion,5,571,Edwin Encarnacion,encared01,572,Jerar Encarnacion,encarje01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-571
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,1295,Edwin Jackson,3,957,Edwin Jackson,jacksed01,958,Austin Jackson,jacksau01,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-957
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,2519,Eric Skoglund,1,1834,Eric Skoglund,skogler01,1865,Eric Sogard,sogarer01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1834
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4891,Eric Thames,5,1976,Eric Thames,thameer01,801,Eric Haase,haaseer01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1976
|
||||
player+AF8-ambiguous+AF8-match,Player could match 9 different SbaPlayers,1317,Felix Hernandez,3,867,Felix Hernandez,hernafe02,874,Elieser Hernandez,hernael01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-867
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4542,Felix Pena,5,1518,Felix Pena,penafe01,867,Felix Hernandez,hernafe02,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1518
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,1319,Fernando Rodney,3,1669,Fernando Rodney,rodnefe01,1701,Fernando Romero,romerfe01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1669
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,2532,Fernando Romero,1,1701,Fernando Romero,romerfe01,1669,Fernando Rodney,rodnefe01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1701
|
||||
player+AF8-ambiguous+AF8-match,Player could match 9 different SbaPlayers,2533,Francisco Arcia,1,87,Francisco Arcia,arciafr01,1126,Francisco Liriano,liriafr01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-87
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4169,Francisco Cervelli,5,359,Francisco Cervelli,cervefr01,87,Francisco Arcia,arciafr01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-359
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,1324,Francisco Liriano,3,1126,Francisco Liriano,liriafr01,87,Francisco Arcia,arciafr01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1126
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,2537,Francisco Pena,1,1517,Francisco Pena,penafr01,87,Francisco Arcia,arciafr01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1517
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,2542,Gabriel Moya,1,1379,Gabriel Moya,moyaga01,2214,Gabriel Ynoa,ynoaga01,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-1379
|
||||
player+AF8-ambiguous+AF8-match,Player could match 11 different SbaPlayers,4902,Gio Gonzalez,5,739,Gio Gonzalez,gonzagi01,743,Victor Gonzalez,gonzavi02,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-739
|
||||
player+AF8-ambiguous+AF8-match,Player could match 8 different SbaPlayers,2552,Gorkys Hernandez,1,869,Gorkys Hernandez,hernago01,879,Jose Hernandez,hernajo03,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-869
|
||||
player+AF8-ambiguous+AF8-match,Player could match 6 different SbaPlayers,4906,Greg Garcia,5,681,Greg Garcia,garcigr01,682,Robel Garcia,garciro02,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-681
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,2557,Gregor Blanco,1,207,Gregor Blanco,blancgr01,1569,Gregory Polanco,polangr01,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-207
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,1367,Hector Velazquez,3,2066,Hector Velazquez,velazhe01,2068,Nelson Velazquez,velazne01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-2066
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,1368,Hernan Perez,3,1536,Hernan Perez,perezhe01,1542,Eury Perez,perezeu02,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1536
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4917,Hunter Pence,5,1520,Hunter Pence,pencehu01,770,Hunter Greene,greenhu01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1520
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,1375,Hunter Wood,3,2192,Hunter Wood,woodhu01,747,Hunter Goodman,goodmhu01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-2192
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,1377,Ian Desmond,3,495,Ian Desmond,desmoia01,74,Ian Anderson,anderia01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-495
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,1380,Ian Kinsler,3,1051,Ian Kinsler,kinslia01,2178,Dan Winkler,winklda01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1051
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4743,Jace Fry,5,661,Jace Fry,fryja01,641,Jake Fraley,fraleja01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-661
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,2595,Jacob Rhame,1,1642,Jacob Rhame,rhameja01,65,Jacob Amaya,amayaja01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1642
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,2611,James Pazos,1,1509,James Pazos,pazosja01,1506,James Paxton,paxtoja01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1509
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4938,Jared Hughes,5,937,Jared Hughes,hugheja02,1821,Jared Shuster,shustja01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-937
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,2618,Jason Hammel,1,813,Jason Hammel,hammeja01,13,Jason Adam,adamja01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-813
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,1428,Jason Vargas,3,2053,Jason Vargas,vargaja01,13,Jason Adam,adamja01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-2053
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4588,Javy Guerra,5,784,Javy Guerra,guerrja02,786,Javy Guerra,guerrja01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-784
|
||||
player+AF8-ambiguous+AF8-match,Player could match 15 different SbaPlayers,1441,Jefry Rodriguez,3,1677,Jefry Rodriguez,rodrije01,1673,Joely Rodriguez,rodrijo06,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1677
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,1452,Jesus Sucre,3,1939,Jesus Sucre,sucreje01,1749,Jesus Sanchez,sanchje02,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1939
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,2648,Jim Johnson,1,984,Jim Johnson,johnsji04,986,Brian Johnson,johnsbr02,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-984
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,1476,John Hicks,3,893,John Hicks,hicksjo02,894,Jordan Hicks,hicksjo03,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-893
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,2668,Johnny Field,1,613,Johnny Field,fieldjo04,614,Josh Fields,fieldjo03,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-613
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4961,Jon Jay,5,973,Jon Jay,jayjo02,766,Jon Gray,grayjo02,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-973
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,4724,Jonathan Holder,5,912,Jonathan Holder,holdejo02,1779,Jonathan Schoop,schoojo01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-912
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,1487,Jonathan Lucroy,3,1163,Jonathan Lucroy,lucrojo01,318,Jonathan Cannon,cannojo02,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1163
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,1494,Jordan Zimmermann,3,2230,Jordan Zimmermann,zimmejo02,2229,Ryan Zimmerman,zimmery01,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-2230
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4970,Jorge Bonifacio,5,220,Jorge Bonifacio,bonifjo01,1570,Jorge Polanco,polanjo01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-220
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,2687,Jose Bautista,1,153,Jose Bautista,bautijo02,293,Jose Butto,buttojo01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-153
|
||||
player+AF8-ambiguous+AF8-match,Player could match 7 different SbaPlayers,2689,Jose Briceno,1,254,Jose Briceno,bricejo01,139,Jose Barrero,garcijo02,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-254
|
||||
player+AF8-ambiguous+AF8-match,Player could match 8 different SbaPlayers,2690,Jose Castillo,1,342,Jose Castillo,castijo02,321,Joey Cantillo,cantijo01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-342
|
||||
player+AF8-ambiguous+AF8-match,Player could match 12 different SbaPlayers,4977,Jose Martinez,5,1222,Jose Martinez,martijo08,1226,Seth Martinez,martise01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1222
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,4978,Jose Osuna,5,1471,Jose Osuna,osunajo01,2035,Jose Urena,urenajo01,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-1471
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,2696,Jose Pirela,1,1562,Jose Pirela,pireljo01,2035,Jose Urena,urenajo01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1562
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,2702,Josh Fields,1,614,Josh Fields,fieldjo03,613,Johnny Field,fieldjo04,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-614
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,1545,Justin Bour,3,226,Justin Bour,bourju01,271,Justin Bruihl,bruihju01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-226
|
||||
player+AF8-ambiguous+AF8-match,Player could match 7 different SbaPlayers,2717,Justin Miller,1,1321,Justin Miller,milleju02,47,Austin Allen,allenau01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1321
|
||||
player+AF8-ambiguous+AF8-match,Player could match 6 different SbaPlayers,4994,Justin Smoak,5,1857,Justin Smoak,smoakju01,1999,Justin Topa,topaju01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1857
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,1567,Kevin McCarthy,3,1264,Kevin McCarthy,mccarke01,1265,Jake McCarthy,mccarja02,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-1264
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,2739,Kohl Stewart,1,1911,Kohl Stewart,stewako01,1909,DJ Stewart,stewadj01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1911
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,1591,Leonys Martin,3,1215,Leonys Martin,martile01,1217,Jason Martin,martija03,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1215
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,5019,Luis Perdomo,5,1529,Luis Perdomo,perdolu02,1530,Angel Perdomo,perdoan01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1529
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,5025,Mallex Smith,5,1846,Mallex Smith,smithma05,1845,Caleb Smith,smithca03,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1846
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,2780,Marco Estrada,1,586,Marco Estrada,estrama01,587,Thairo Estrada,estrath01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-586
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,1635,Mark Reynolds,3,1639,Mark Reynolds,reynoma01,1640,Matt Reynolds,reynoma03,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-1639
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,1638,Martin Prado,3,1582,Martin Prado,pradoma01,1535,Martin Perez,perezma02,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1582
|
||||
player+AF8-ambiguous+AF8-match,Player could match 9 different SbaPlayers,5029,Mason Williams,5,2154,Mason Williams,willima10,2160,Gavin Williams,williga01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-2154
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,5030,Matt Adams,5,15,Matt Adams,adamsma01,16,Austin Adams,adamsau02,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-15
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,2796,Matt Belisle,1,167,Matt Belisle,belisma01,2183,Matt Wisler,wislema01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-167
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,5032,Matt Davidson,5,463,Matt Davidson,davidma02,464,Tucker Davidson,davidtu01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-463
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4753,Matt Kemp,5,1026,Matt Kemp,kempma01,1835,Matt Skole,skolema01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1026
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,5035,Matt Magill,5,1182,Matt Magill,magilma01,806,Matt Hall,hallma02,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-1182
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,5037,Matt Wieters,5,2152,Matt Wieters,wietema01,2183,Matt Wisler,wislema01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-2152
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,5038,Matthew Boyd,5,230,Matthew Boyd,boydma01,999,Matthew Joyce,joycema01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-230
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,5039,Matthew Joyce,5,999,Matthew Joyce,joycema01,230,Matthew Boyd,boydma01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-999
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,1670,Melky Cabrera,3,300,Melky Cabrera,cabreme01,298,Miguel Cabrera,cabremi01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-300
|
||||
player+AF8-ambiguous+AF8-match,Player could match 7 different SbaPlayers,1676,Michael Feliz,3,602,Michael Feliz,felizmi01,1022,Michael Kelly,kellymi03,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-602
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4598,Mike Fiers,5,615,Mike Fiers,fiersmi01,1251,Mike Mayers,mayermi01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-615
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,1699,Mike Wright,3,2199,Mike Wright,wrighmi01,2200,Kyle Wright,wrighky01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-2199
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,5061,Nate Jones,5,990,Nate Jones,jonesna01,994,Nolan Jones,jonesno01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-990
|
||||
player+AF8-ambiguous+AF8-match,Player could match 7 different SbaPlayers,2850,Neil Ramirez,1,1603,Neil Ramirez,ramirne01,1606,Noe Ramirez,ramirno01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1603
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,5063,Neil Walker,5,2103,Neil Walker,walkene01,2106,Ryan Walker,walkery01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-2103
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,1720,Nick Hundley,3,940,Nick Hundley,hundlni01,2027,Nik Turley,turleni01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-940
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,5065,Nick Markakis,5,1201,Nick Markakis,markani01,1292,Nick Mears,mearsni01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1201
|
||||
player+AF8-ambiguous+AF8-match,Player could match 8 different SbaPlayers,1730,Nick Williams,3,2157,Nick Williams,willini01,2161,Alika Williams,willial04,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-2157
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,5076,Oliver Drake,5,534,Oliver Drake,drakeol01,1533,Oliver Perez,perezol01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-534
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4430,Oliver Perez,5,1533,Oliver Perez,perezol01,1542,Eury Perez,perezeu02,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1533
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4737,Pedro Baez,5,111,Pedro Baez,baezpe01,1486,Pedro Pages,pagespe01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-111
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,1758,Pedro Strop,3,1929,Pedro Strop,stroppe01,1804,Pedro Severino,severpe01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1929
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,2894,Rajai Davis,1,466,Rajai Davis,davisra01,474,JD Davis,davisjd01,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-466
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,5091,Robbie Erlin,5,578,Robbie Erlin,erlinro01,1620,Robbie Ray,rayro02,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-578
|
||||
player+AF8-ambiguous+AF8-match,Player could match 15 different SbaPlayers,1800,Ronny Rodriguez,3,1672,Ronny Rodriguez,rodriro03,1683,Randy Rodriguez,rodrira02,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1672
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,1801,Rosell Herrera,3,883,Rosell Herrera,herrero02,884,Jose Herrera,herrejo04,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-883
|
||||
player+AF8-ambiguous+AF8-match,Player could match 6 different SbaPlayers,4757,Ryan Braun,5,244,Ryan Braun,braunry02,1719,Ryan Rua,ruary01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-244
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,5102,Ryan Buchter,5,276,Ryan Buchter,buchtry01,287,Ryan Burr,burrry01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-276
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,2926,Ryan Flaherty,1,621,Ryan Flaherty,flahery01,622,Jack Flaherty,flaheja01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-621
|
||||
player+AF8-ambiguous+AF8-match,Player could match 6 different SbaPlayers,2928,Ryan Madson,1,1180,Ryan Madson,madsory01,935,Bryan Hudson,hudsobr01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1180
|
||||
player+AF8-ambiguous+AF8-match,Player could match 7 different SbaPlayers,2932,Ryan Rua,1,1719,Ryan Rua,ruary01,244,Ryan Braun,braunry02,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1719
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,5109,Ryon Healy,5,842,Ryon Healy,healyry01,845,Jon Heasley,heasljo01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-842
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,1826,Sam Dyson,3,554,Sam Dyson,dysonsa01,1139,Sam Long,longsa01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-554
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,2941,Sam Freeman,1,653,Sam Freeman,freemsa01,651,Mike Freeman,freemmi01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-653
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,1837,Scott Oberg,3,1448,Scott Oberg,obergsc01,1772,Scott Schebler,schebsc01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1448
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,1838,Scott Schebler,3,1772,Scott Schebler,schebsc01,1448,Scott Oberg,obergsc01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1772
|
||||
player+AF8-ambiguous+AF8-match,Player could match 16 different SbaPlayers,1844,Sean Rodriguez,3,1671,Sean Rodriguez,rodrise01,1685,Endy Rodriguez,rodrien01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1671
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4393,Shane Greene,5,769,Shane Greene,greensh02,770,Hunter Greene,greenhu01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-769
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,2963,Spencer Kieboom,1,1037,Spencer Kieboom,kiebosp01,1038,Carter Kieboom,kieboca01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1037
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,5129,Steven Souza Jr,5,1881,Steven Souza Jr,souzast01,543,Steven Duggar,duggast01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1881
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,5130,Tanner Roark,5,1659,Tanner Roark,roarkta01,122,Tanner Banks,banksta01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1659
|
||||
player+AF8-ambiguous+AF8-match,Player could match 6 different SbaPlayers,5135,Taylor Williams,5,2155,Taylor Williams,willita01,2110,Taylor Walls,wallsta01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-2155
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,1880,Tayron Guerrero,3,788,Tayron Guerrero,guerrta01,790,Taylor Guerrieri,guerrta02,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-788
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4686,Todd Frazier,5,647,Todd Frazier,frazito01,648,Adam Frazier,fraziad01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-647
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4523,Tommy Hunter,5,941,Tommy Hunter,hunteto02,859,Tommy Henry,henryto01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-941
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,1926,Tyler Austin,3,103,Tyler Austin,austity01,1399,Tyler Naquin,naquity01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-103
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,5151,Tyler Bashlor,5,144,Tyler Bashlor,bashlty01,1183,Tyler Mahle,mahlety01,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-144
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,4551,Tyler Flowers,5,630,Tyler Flowers,flowety01,1691,Tyler Rogers,rogerty01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-630
|
||||
player+AF8-ambiguous+AF8-match,Player could match 6 different SbaPlayers,1937,Tyler Olson,3,1460,Tyler Olson,olsonty01,922,Tyler Holton,holtoty01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1460
|
||||
player+AF8-ambiguous+AF8-match,Player could match 6 different SbaPlayers,1942,Tyler White,3,2141,Tyler White,whitety01,2094,Tyler Wade,wadety01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-2141
|
||||
player+AF8-ambiguous+AF8-match,Player could match 7 different SbaPlayers,3025,Victor Martinez,1,1221,Victor Martinez,martivi01,325,Victor Caratini,caratvi01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1221
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,1959,Welington Castillo,3,343,Welington Castillo,castiwe01,341,Diego Castillo,castidi02,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-343
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4537,Will Harris,5,825,Will Harris,harriwi10,827,Michael Harris,harrimi04,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-825
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,1978,Yadiel Rivera,3,1656,Yadiel Rivera,riverya01,1657,Emmanuel Rivera,riverem01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1656
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,3055,Yefry Ramirez,1,1607,Yefry Ramirez,ramirye01,1606,Noe Ramirez,ramirno01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1607
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4126,Yolmer Sanchez,5,1744,Yolmer Sanchez,sanchca01,1747,Ali Sanchez,sanchal04,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1744
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,3065,Zach Duke,1,545,Zach Duke,dukeza01,1137,Zach Logue,logueza01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-545
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4507,Zack Britton,5,260,Zack Britton,brittza01,281,Zack Burdi,burdiza01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-260
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,2008,Zack Cozart,3,428,Zack Cozart,cozarza01,1818,Zack Short,shortza01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-428
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,1019,Adalberto Mejia,3,1296,Adalberto Mejia,mejiaad01,1349,Adalberto Mondesi,mondera02,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1296
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,1049,Alex McRae,3,1288,Alex McRae,mcraeal01,308,Alex Call,callal02,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1288
|
||||
player+AF8-ambiguous+AF8-match,Player could match 9 different SbaPlayers,4799,Austin Allen,5,47,Austin Allen,allenau01,483,Austin Dean,deanau01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-47
|
||||
player+AF8-ambiguous+AF8-match,Player could match 9 different SbaPlayers,4800,Austin Brice,5,253,Austin Brice,briceau01,1649,Austin Riley,rileyau01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-253
|
||||
player+AF8-ambiguous+AF8-match,Player could match 11 different SbaPlayers,1083,Austin Dean,3,483,Austin Dean,deanau01,16,Austin Adams,adamsau02,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-483
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,1111,Brad Wieck,3,2150,Brad Wieck,wieckbr01,1510,Brad Peacock,peacobr01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-2150
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,1112,Branden Kline,3,1059,Branden Kline,klinebr01,1052,Brandon Kintzler,kintzbr01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1059
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,4563,Brandon Brennan,5,249,Brandon Brennan,brennbr01,195,Brandon Bielak,bielabr01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-249
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,4840,Christin Stewart,5,1910,Christin Stewart,stewach02,1789,Christian Scott,scottch01,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-1910
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,1214,Corban Joseph,3,997,Corban Joseph,josepco01,996,Caleb Joseph,josepca01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-997
|
||||
player+AF8-ambiguous+AF8-match,Player could match 6 different SbaPlayers,1224,Curtis Granderson,3,762,Curtis Granderson,grandcu01,73,Tim Anderson,anderti01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-762
|
||||
player+AF8-ambiguous+AF8-match,Player could match 7 different SbaPlayers,1289,Edgar Garcia,3,686,Edgar Garcia,garcied01,681,Greg Garcia,garcigr01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-686
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,1331,Gabriel Ynoa,3,2214,Gabriel Ynoa,ynoaga01,1379,Gabriel Moya,moyaga01,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-2214
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,1348,Gordon Beckham,3,160,Gordon Beckham,beckhgo01,159,Jordan Beck,beckjo01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-160
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,1364,Hector Noesi,3,1429,Hector Noesi,noesihe01,1413,Hector Neris,nerishe01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1429
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,1371,Humberto Arteaga,3,97,Humberto Arteaga,arteahu01,339,Humberto Castellanos,castehu01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-97
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4929,Jairo Diaz,5,501,Jairo Diaz,diazja01,511,Yainer Diaz,diazya02,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-501
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4967,Jordan Yamamoto,5,2205,Jordan Yamamoto,yamamjo01,1699,Jordan Romano,romanjo03,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-2205
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4983,Josh James,5,965,Josh James,jamesjo02,1695,Josh Rojas,rojasjo01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-965
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4985,Josh Osich,5,1469,Josh Osich,osichjo01,1852,Josh Smith,smithjo11,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1469
|
||||
player+AF8-ambiguous+AF8-match,Player could match 6 different SbaPlayers,1546,Justin Shafer,3,1807,Justin Shafer,shafeju01,1837,Justin Slaten,slateju01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1807
|
||||
player+AF8-ambiguous+AF8-match,Player could match 6 different SbaPlayers,1554,Kelvin Herrera,3,881,Kelvin Herrera,herreke01,864,Kevin Herget,hergeke01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-881
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,5009,Kyle Ryan,5,1730,Kyle Ryan,ryanky01,1731,Ryder Ryan,ryanry01,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-1730
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,5012,Lewis Thorpe,5,1989,Lewis Thorpe,thorple01,1990,Drew Thorpe,thorpdr01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1989
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4664,Luis Avilan,5,106,Luis Avilan,avilalu01,716,Luis Gil,gillu01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-106
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,1614,Luke Bard,3,126,Luke Bard,bardlu01,118,Luken Baker,bakerlu01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-126
|
||||
player+AF8-ambiguous+AF8-match,Player could match 6 different SbaPlayers,1619,Mac Williamson,3,2163,Mac Williamson,willima11,2154,Mason Williams,willima10,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-2163
|
||||
player+AF8-ambiguous+AF8-match,Player could match 11 different SbaPlayers,1629,Marco Hernandez,3,872,Marco Hernandez,hernama02,880,Carlos Hernandez,hernaca04,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-872
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,1642,Matt Albers,3,29,Matt Albers,alberma01,2109,Matt Wallner,wallnma01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-29
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,1656,Matt Skole,3,1835,Matt Skole,skolema01,2183,Matt Wisler,wislema01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1835
|
||||
player+AF8-ambiguous+AF8-match,Player could match 6 different SbaPlayers,1680,Michel Baez,3,113,Michel Baez,baezmi01,1473,Michel Otanez,otanemi01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-113
|
||||
player+AF8-ambiguous+AF8-match,Player could match 6 different SbaPlayers,5052,Mike Freeman,5,651,Mike Freeman,freemmi01,653,Sam Freeman,freemsa01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-651
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,1694,Mike Morin,3,1370,Mike Morin,morinmi01,1335,Mike Minor,minormi01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1370
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4536,Nate Lowe,5,1155,Nathaniel Lowe,lowena01,990,Nate Jones,jonesna01,0.783,Choose correct match from 2 options,USE+AF8-SBA+AF8-1155
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,1718,Nick Dini,3,518,Nick Dini,dinini01,1230,Nick Martini,martini02,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-518
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,5064,Nick Goody,5,750,Nick Goody,goodyni01,752,Nick Gordon,gordoni01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-750
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4704,Nick Margevicius,5,1197,Nick Margevicius,margeni01,1230,Nick Martini,martini02,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1197
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,1792,Roberto Osuna,3,1470,Roberto Osuna,osunaro01,1938,Robert Suarez,suarero01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1470
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,1811,Ryan Carpenter,3,328,Ryan Carpenter,carpery01,330,Kerry Carpenter,carpeke01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-328
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,1813,Ryan Goins,3,728,Ryan Goins,goinsry01,731,Yan Gomes,gomesya01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-728
|
||||
player+AF8-ambiguous+AF8-match,Player could match 10 different SbaPlayers,4363,Ryan Weber,5,2128,Ryan Weber,weberry01,2123,Ryan Weathers,weathry01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-2128
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,5112,Scott Heineman,5,850,Scott Heineman,heinesc01,851,Tyler Heineman,heinety01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-850
|
||||
player+AF8-ambiguous+AF8-match,Player could match 7 different SbaPlayers,4654,Shaun Anderson,5,72,Shaun Anderson,andersh01,74,Ian Anderson,anderia01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-72
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,1877,Taylor Cole,3,397,Taylor Cole,coleta01,384,Taylor Clarke,clarkta01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-397
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,1878,Taylor Guerrieri,3,790,Taylor Guerrieri,guerrta02,788,Tayron Guerrero,guerrta01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-790
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,1938,Tyler Saladino,3,1737,Tyler Saladino,saladty01,726,Tyler Glasnow,glasnty01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1737
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,4600,Tyler Webb,5,2125,Tyler Webb,webbty01,2094,Tyler Wade,wadety01,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-2125
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,1944,Victor Alcantara,3,33,Victor Alcantara,alcanvi01,34,Sergio Alcantara,alcanse01,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-33
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,5163,Wilmer Font,5,634,Wilmer Font,fontwi01,516,Wilmer Difo,difowi01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-634
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,2002,Zac Reininger,3,1628,Zac Reininger,reiniza01,774,Zack Greinke,greinza01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1628
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4241,Trevor Rosenthal,5,1713,Trevor Rosenthal,rosentr01,1902,Trevor Stephan,stephtr01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1713
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,5170,Zack Burdi,5,281,Zack Burdi,burdiza01,260,Zack Britton,brittza01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-281
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4806,Beau Taylor,5,1968,Beau Taylor,taylobe11,1966,Blake Taylor,taylobl01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1968
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,4839,Christian Colon,5,406,Christian Colon,colonch01,1789,Christian Scott,scottch01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-406
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4872,Drew Butera,5,290,Drew Butera,buterdr01,2120,Drew Waters,waterdr01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-290
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4933,Jake Noll,5,1435,Jake Noll,nollja01,57,Jake Alu,aluja01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1435
|
||||
player+AF8-ambiguous+AF8-match,Player could match 6 different SbaPlayers,4975,Jose Garcia,5,682,Robel Garcia,garciro02,690,Adolis Garcia,garciad02,0.783,Choose correct match from 5 options,USE+AF8-SBA+AF8-682
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4981,Joseph Odom,5,1450,Joseph Odom,odomjo01,1707,Jose Rondon,rondojo02,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1450
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,5058,Monte Harrison,5,831,Monte Harrison,harrimo01,829,Josh Harrison,harrijo05,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-831
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4408,Wyatt Mathisen,5,1236,Wyatt Mathisen,mathiwy01,1331,Wyatt Mills,millswy01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1236
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4791,Andrew Triggs,5,2014,Andrew Triggs,triggan01,1400,Andrew Nardi,nardian01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-2014
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4697,Brady Lail,5,1084,Brady Lail,lailbr01,206,Bradley Blalock,blalobr01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1084
|
||||
player+AF8-ambiguous+AF8-match,Player could match 8 different SbaPlayers,4562,Brandon Bailey,5,116,Brandon Bailey,bailebr01,2112,Brandon Walter,waltebr01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-116
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,4432,Brandon Leibrandt,5,1111,Brandon Leibrandt,leibrbr01,249,Brandon Brennan,brennbr01,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-1111
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,4819,Brian Moran,5,1362,Brian Moran,moranbr01,1260,Brian McCann,mccanbr01,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-1362
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4823,Cam Hill,5,902,Cam Hill,hillca02,900,Tim Hill,hillti01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-902
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4848,Cy Sneed,5,1860,Cy Sneed,sneedcy01,1625,Cody Reed,reedco01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1860
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4849,Dakota Bacus,5,108,Dakota Bacus,bacusda01,934,Dakota Hudson,hudsoda02,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-108
|
||||
player+AF8-ambiguous+AF8-match,Player could match 4 different SbaPlayers,4622,Deivi Garcia,5,688,Deivi Garcia,garcide01,687,Dermis Garcia,garcide02,1,Choose correct match from 4 options,USE+AF8-SBA+AF8-688
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4915,Humberto Mejia,5,1297,Humberto Mejia,mejiahu01,1296,Adalberto Mejia,mejiaad01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-1297
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4216,James Hoyt,5,931,James Hoyt,hoytja01,1477,James Outman,outmaja01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-931
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,3810,Javy A Guerra,4,784,Javy Guerra,guerrja02,786,Javy Guerra,guerrja01,0.917,Choose correct match from 2 options,USE+AF8-SBA+AF8-784
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4235,Jesse Hahn,5,804,Jesse Hahn,hahnje01,370,Jesse Chavez,chaveje01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-804
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4954,Joey Gerber,5,712,Joey Gerber,gerbejo01,609,Jose Ferrer,ferrejo01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-712
|
||||
player+AF8-ambiguous+AF8-match,Player could match 5 different SbaPlayers,4336,Justin Topa,5,1999,Justin Topa,topaju01,1857,Justin Smoak,smoakju01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1999
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,5008,Kyle Hart,5,832,Kyle Hart,hartky01,830,Kyle Harrison,harriky01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-832
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,5033,Matt Hall,5,806,Matt Hall,hallma02,1182,Matt Magill,magilma01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-806
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,5072,Nik Turley,5,2027,Nik Turley,turleni01,940,Nick Hundley,hundlni01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-2027
|
||||
player+AF8-ambiguous+AF8-match,Player could match 9 different SbaPlayers,5074,Nivaldo Rodriguez,5,1687,Nivaldo Rodriguez,rodrini01,1685,Endy Rodriguez,rodrien01,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-1687
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,5085,Ramon Rosso,5,1716,Ramon Rosso,rossora01,2037,Ramon Urias,uriasra01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1716
|
||||
player+AF8-ambiguous+AF8-match,Player could match 10 different SbaPlayers,5089,Rico Garcia,5,693,Rico Garcia,garciri01,689,Rony Garcia,garciro03,1,Choose correct match from 5 options,USE+AF8-SBA+AF8-693
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4230,Ryan Sherriff,5,1814,Ryan Sherriff,sherrry01,858,Ryan Hendrix,hendrry01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1814
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,4682,Sam Selman,5,1798,Sam Selman,selmasa01,653,Sam Freeman,freemsa01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1798
|
||||
player+AF8-ambiguous+AF8-match,Player could match 2 different SbaPlayers,5124,Stephen Tarpley,5,1958,Stephen Tarpley,tarplst01,1070,Stephen Kolek,kolekst01,1,Choose correct match from 2 options,USE+AF8-SBA+AF8-1958
|
||||
player+AF8-ambiguous+AF8-match,Player could match 3 different SbaPlayers,4487,Taylor Guilbeau,5,791,Taylor Guilbeau,guilbta01,717,Tyler Gilbert,gilbety01,1,Choose correct match from 3 options,USE+AF8-SBA+AF8-791
|
||||
middle+AF8-initial+AF8-conflict,3 players with similar first/last names but different middle initials,4187,Luis H Garcia,5,,,,5017,Luis Garcia,,N/A,+ACI-Verify these are different people: Luis H Garcia, Luis Garcia, Luis V Garcia+ACI-,DIFFERENT+AF8-PEOPLE
|
||||
middle+AF8-initial+AF8-conflict,2 players with similar first/last names but different middle initials,4660,Will Smith,5,,,,4181,Will D Smith,,N/A,+ACI-Verify these are different people: Will Smith, Will D Smith+ACI-,DIFFERENT+AF8-PEOPLE
|
||||
middle+AF8-initial+AF8-conflict,2 players with similar first/last names but different middle initials,4588,Javy Guerra,5,,,,3810,Javy A Guerra,,N/A,+ACI-Verify these are different people: Javy Guerra, Javy A Guerra+ACI-,DIFFERENT+AF8-PEOPLE
|
||||
|
@ -0,0 +1 @@
|
||||
temp_id,first_name,last_name,key_bbref,key_fangraphs,key_mlbam,key_retro
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,121 @@
|
||||
player_id,player_name,player_season,player_bbref_id,sbaplayer_id,sbaplayer_name,sbaplayer_bbref,assignment_type
|
||||
2013,AJ Ellis,1,,570,AJ Ellis,ellisaj01,existing_sbaplayer
|
||||
2022,Abraham Almonte,1,,49,Abraham Almonte,almonab01,existing_sbaplayer
|
||||
2034,Addison Reed,1,,1624,Addison Reed,reedad01,existing_sbaplayer
|
||||
2037,Adrian Beltre,1,,174,Adrian Beltre,beltrad01,existing_sbaplayer
|
||||
2038,Adrian Gonzalez,1,,738,Adrian Gonzalez,gonzaad01,existing_sbaplayer
|
||||
2041,Alcides Escobar,1,,580,Alcides Escobar,escobal02,existing_sbaplayer
|
||||
2043,Alen Hanson,1,,819,Alen Hanson,hansoal01,existing_sbaplayer
|
||||
2045,Alex Blandino,1,,210,Alex Blandino,blandal01,existing_sbaplayer
|
||||
2051,Alex Wilson,1,,2168,Alex Wilson,wilsoal01,existing_sbaplayer
|
||||
2063,Andrew Romine,1,,1703,Andrew Romine,rominan01,existing_sbaplayer
|
||||
2074,Arodys Vizcaino,1,,2083,Arodys Vizcaino,vizcaar01,existing_sbaplayer
|
||||
2080,Austin Jackson,1,,958,Austin Jackson,jacksau01,existing_sbaplayer
|
||||
2086,Bartolo Colon,1,,405,Bartolo Colon,colonba01,existing_sbaplayer
|
||||
2096,Bobby Wilson,1,,2166,Bobby Wilson,wilsobo02,existing_sbaplayer
|
||||
2102,Brad Ziegler,1,,2226,Brad Ziegler,zieglbr01,existing_sbaplayer
|
||||
2106,Brandon Guyer,1,,798,Brandon Guyer,guyerbr01,existing_sbaplayer
|
||||
2108,Brandon Maurer,1,,1246,Brandon Maurer,maurebr01,existing_sbaplayer
|
||||
2109,Brandon McCarthy,1,,1263,Brandon McCarthy,mccarbr01,existing_sbaplayer
|
||||
2110,Brandon Morrow,1,,1374,Brandon Morrow,morrobr01,existing_sbaplayer
|
||||
2114,Brett Cecil,1,,357,Brett Cecil,cecilbr01,existing_sbaplayer
|
||||
2124,Bryan Mitchell,1,,1339,Bryan Mitchell,mitchbr01,existing_sbaplayer
|
||||
2128,Bud Norris,1,,1438,Bud Norris,norribu01,existing_sbaplayer
|
||||
2132,Caleb Joseph,1,,996,Caleb Joseph,josepca01,existing_sbaplayer
|
||||
2136,Carl Edwards Jr,1,,560,Carl Edwards Jr,edwarca01,existing_sbaplayer
|
||||
2137,Carlos Asuaje,1,,102,Carlos Asuaje,asuajca01,existing_sbaplayer
|
||||
2145,Carlos Tocci,1,,1993,Carlos Tocci,toccica01,existing_sbaplayer
|
||||
2159,Chase Utley,1,,2043,Chase Utley,utleych01,existing_sbaplayer
|
||||
2160,Chasen Bradford,1,,234,Chasen Bradford,bradfch02,existing_sbaplayer
|
||||
2169,Chris Rusin,1,,1727,Chris Rusin,rusinch01,existing_sbaplayer
|
||||
2173,Chris Volstad,1,,2089,Chris Volstad,volstch01,existing_sbaplayer
|
||||
2175,Christian Villanueva,1,,2078,Christian Villanueva,villach01,existing_sbaplayer
|
||||
2180,Cody Allen,1,,43,Cody Allen,allenco01,existing_sbaplayer
|
||||
2192,Craig Gentry,1,,711,Craig Gentry,gentrcr01,existing_sbaplayer
|
||||
2197,Dan Jennings,1,,977,Dan Jennings,jennida01,existing_sbaplayer
|
||||
2208,Danny Barnes,1,,130,Danny Barnes,barneda02,existing_sbaplayer
|
||||
2211,Danny Valencia,1,,2050,Danny Valencia,valenda01,existing_sbaplayer
|
||||
2217,David Freitas,1,,656,David Freitas,freitda01,existing_sbaplayer
|
||||
2222,David Robertson,1,,1662,David Robertson,roberda08,existing_sbaplayer
|
||||
2226,Denard Span,1,,1882,Denard Span,spande01,existing_sbaplayer
|
||||
2230,Devin Mesoraco,1,,1313,Devin Mesoraco,mesorde01,existing_sbaplayer
|
||||
2231,Devon Travis,1,,2009,Devon Travis,travide01,existing_sbaplayer
|
||||
2235,Dixon Machado,1,,1174,Dixon Machado,machadi01,existing_sbaplayer
|
||||
2240,Doug Fister,1,,619,Doug Fister,fistedo01,existing_sbaplayer
|
||||
2243,Drew Rucinski,1,,1720,Drew Rucinski,rucindr01,existing_sbaplayer
|
||||
2244,Drew Steckenrider,1,,1898,Drew Steckenrider,steckdr01,existing_sbaplayer
|
||||
2246,Dustin Fowler,1,,640,Dustin Fowler,fowledu01,existing_sbaplayer
|
||||
2250,Eddie Butler,1,,291,Eddie Butler,butleed01,existing_sbaplayer
|
||||
2252,Edgar Santana,1,,1763,Edgar Santana,santaed01,existing_sbaplayer
|
||||
2256,Edubray Ramos,1,,1613,Edubray Ramos,ramosed02,existing_sbaplayer
|
||||
2519,Eric Skoglund,1,,1834,Eric Skoglund,skogler01,existing_sbaplayer
|
||||
2521,Eric Young Jr,1,,2221,Eric Young Jr,younger03,existing_sbaplayer
|
||||
2526,Evan Gattis,1,,705,Evan Gattis,gattiev01,existing_sbaplayer
|
||||
2532,Fernando Romero,1,,1701,Fernando Romero,romerfe01,existing_sbaplayer
|
||||
2533,Francisco Arcia,1,,87,Francisco Arcia,arciafr01,existing_sbaplayer
|
||||
2537,Francisco Pena,1,,1517,Francisco Pena,penafr01,existing_sbaplayer
|
||||
2542,Gabriel Moya,1,,1379,Gabriel Moya,moyaga01,existing_sbaplayer
|
||||
2552,Gorkys Hernandez,1,,869,Gorkys Hernandez,hernago01,existing_sbaplayer
|
||||
2554,Greg Bird,1,,197,Greg Bird,birdgr01,existing_sbaplayer
|
||||
2557,Gregor Blanco,1,,207,Gregor Blanco,blancgr01,existing_sbaplayer
|
||||
2562,Harrison Musgrave,1,,1393,Harrison Musgrave,musgrha01,existing_sbaplayer
|
||||
2563,Heath Fillmyer,1,,616,Heath Fillmyer,fillmhe01,existing_sbaplayer
|
||||
2575,Hunter Strickland,1,,1925,Hunter Strickland,strichu01,existing_sbaplayer
|
||||
2625,JB Shuck,1,,1820,JB Shuck,shuckja01,existing_sbaplayer
|
||||
2591,Jackson Stephens,1,,1903,Jackson Stephens,stephja01,existing_sbaplayer
|
||||
2594,Jacob Nix,1,,1426,Jacob Nix,nixja02,existing_sbaplayer
|
||||
2595,Jacob Rhame,1,,1642,Jacob Rhame,rhameja01,existing_sbaplayer
|
||||
2601,Jake Faria,1,,596,Jake Faria,fariaja01,existing_sbaplayer
|
||||
2606,Jake Petricka,1,,1550,Jake Petricka,petrija01,existing_sbaplayer
|
||||
2611,James Pazos,1,,1509,James Pazos,pazosja01,existing_sbaplayer
|
||||
2612,James Shields,1,,1816,James Shields,shielja02,existing_sbaplayer
|
||||
2618,Jason Hammel,1,,813,Jason Hammel,hammeja01,existing_sbaplayer
|
||||
2627,Jeanmar Gomez,1,,733,Jeanmar Gomez,gomezje01,existing_sbaplayer
|
||||
2628,Jed Lowrie,1,,1158,Jed Lowrie,lowrije01,existing_sbaplayer
|
||||
2633,Jefry Marte,1,,1209,Jefry Marte,marteje01,existing_sbaplayer
|
||||
2647,Jim Adduci,1,,19,Jim Adduci,adducji02,existing_sbaplayer
|
||||
2648,Jim Johnson,1,,984,Jim Johnson,johnsji04,existing_sbaplayer
|
||||
2654,Joe Mauer,1,,1245,Joe Mauer,mauerjo01,existing_sbaplayer
|
||||
2668,Johnny Field,1,,613,Johnny Field,fieldjo04,existing_sbaplayer
|
||||
2687,Jose Bautista,1,,153,Jose Bautista,bautijo02,existing_sbaplayer
|
||||
2689,Jose Briceno,1,,254,Jose Briceno,bricejo01,existing_sbaplayer
|
||||
2690,Jose Castillo,1,,342,Jose Castillo,castijo02,existing_sbaplayer
|
||||
2696,Jose Pirela,1,,1562,Jose Pirela,pireljo01,existing_sbaplayer
|
||||
2699,Jose Reyes,1,,1633,Jose Reyes,reyesjo01,existing_sbaplayer
|
||||
2702,Josh Fields,1,,614,Josh Fields,fieldjo03,existing_sbaplayer
|
||||
2717,Justin Miller,1,,1321,Justin Miller,milleju02,existing_sbaplayer
|
||||
2723,Kazuhisa Makita,1,,1186,Kazuhisa Makita,makitka01,existing_sbaplayer
|
||||
2724,Kelby Tomlinson,1,,1997,Kelby Tomlinson,tomlike01,existing_sbaplayer
|
||||
2739,Kohl Stewart,1,,1911,Kohl Stewart,stewako01,existing_sbaplayer
|
||||
2760,Louis Coleman,1,,400,Louis Coleman,colemlo01,existing_sbaplayer
|
||||
2767,Luis Valbuena,1,,2045,Luis Valbuena,valbulu01,existing_sbaplayer
|
||||
2780,Marco Estrada,1,,586,Marco Estrada,estrama01,existing_sbaplayer
|
||||
2787,Mark Trumbo,1,,2020,Mark Trumbo,trumbma01,existing_sbaplayer
|
||||
2796,Matt Belisle,1,,167,Matt Belisle,belisma01,existing_sbaplayer
|
||||
2804,Matt Koch,1,,1066,Matt Koch,kochma01,existing_sbaplayer
|
||||
2806,Matt Moore,1,,1357,Matt Moore,moorema02,existing_sbaplayer
|
||||
2841,Mikie Mahtook,1,,1184,Mikie Mahtook,mahtomi01,existing_sbaplayer
|
||||
2850,Neil Ramirez,1,,1603,Neil Ramirez,ramirne01,existing_sbaplayer
|
||||
2867,Noel Cuevas,1,,452,Noel Cuevas,cuevano01,existing_sbaplayer
|
||||
2883,Paul Sewald,1,,1806,Paul Sewald,sewalpa01,existing_sbaplayer
|
||||
2890,Preston Tucker,1,,2024,Preston Tucker,tuckepr01,existing_sbaplayer
|
||||
2894,Rajai Davis,1,,466,Rajai Davis,davisra01,existing_sbaplayer
|
||||
2926,Ryan Flaherty,1,,621,Ryan Flaherty,flahery01,existing_sbaplayer
|
||||
2927,Ryan LaMarre,1,,1086,Ryan LaMarre,lamarry01,existing_sbaplayer
|
||||
2928,Ryan Madson,1,,1180,Ryan Madson,madsory01,existing_sbaplayer
|
||||
2932,Ryan Rua,1,,1719,Ryan Rua,ruary01,existing_sbaplayer
|
||||
2938,Sal Romano,1,,1700,Sal Romano,romansa01,existing_sbaplayer
|
||||
2941,Sam Freeman,1,,653,Sam Freeman,freemsa01,existing_sbaplayer
|
||||
2943,Sammy Solis,1,,1871,Sammy Solis,solissa01,existing_sbaplayer
|
||||
2954,Seranthony Dominguez,1,,524,Seranthony Dominguez,dominse01,existing_sbaplayer
|
||||
2958,Shane Carle,1,,326,Shane Carle,carlesh01,existing_sbaplayer
|
||||
2963,Spencer Kieboom,1,,1037,Spencer Kieboom,kiebosp01,existing_sbaplayer
|
||||
2985,Tim Collins,1,,402,Tim Collins,colliti01,existing_sbaplayer
|
||||
2994,Tony Sipp,1,,1829,Tony Sipp,sippto01,existing_sbaplayer
|
||||
3002,Trevor Hildenberger,1,,897,Trevor Hildenberger,hildetr01,existing_sbaplayer
|
||||
3023,Victor Arano,1,,83,Victor Arano,aranovi01,existing_sbaplayer
|
||||
3025,Victor Martinez,1,,1221,Victor Martinez,martivi01,existing_sbaplayer
|
||||
3047,Yacksel Rios,1,,1650,Yacksel Rios,riosya01,existing_sbaplayer
|
||||
3055,Yefry Ramirez,1,,1607,Yefry Ramirez,ramirye01,existing_sbaplayer
|
||||
3062,Yovani Gallardo,1,,671,Yovani Gallardo,gallayo01,existing_sbaplayer
|
||||
3065,Zach Duke,1,,545,Zach Duke,dukeza01,existing_sbaplayer
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,396 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Process manual matching decisions from reviewed CSV files
|
||||
Generate two output CSV files:
|
||||
1. New SbaPlayers to insert
|
||||
2. All player_id -> sbaplayer_id assignments
|
||||
"""
|
||||
import csv
|
||||
import json
|
||||
import logging
|
||||
from dataclasses import dataclass
|
||||
from typing import Dict, List, Set, Optional
|
||||
from collections import defaultdict
|
||||
|
||||
logging.basicConfig(level=logging.INFO)
|
||||
logger = logging.getLogger('ProcessDecisions')
|
||||
|
||||
@dataclass
|
||||
class PlayerRecord:
|
||||
id: int
|
||||
name: str
|
||||
season: int
|
||||
bbref_id: Optional[str] = None
|
||||
sbaplayer_id: Optional[int] = None
|
||||
|
||||
@dataclass
|
||||
class SbaPlayerRecord:
|
||||
id: int
|
||||
first_name: str
|
||||
last_name: str
|
||||
key_bbref: Optional[str] = None
|
||||
key_fangraphs: Optional[int] = None
|
||||
key_mlbam: Optional[int] = None
|
||||
key_retro: Optional[str] = None
|
||||
|
||||
@dataclass
|
||||
class NewSbaPlayer:
|
||||
first_name: str
|
||||
last_name: str
|
||||
key_bbref: Optional[str] = None
|
||||
temp_id: int = 0 # Temporary ID for referencing before insertion
|
||||
|
||||
def load_cached_data():
|
||||
"""Load cached player and sbaplayer data"""
|
||||
logger.info("Loading cached data...")
|
||||
|
||||
# Load SbaPlayers
|
||||
with open('/tmp/sbaplayers.json', 'r') as f:
|
||||
sbaplayer_data = json.load(f)
|
||||
|
||||
sbaplayers = []
|
||||
for data in sbaplayer_data:
|
||||
sbaplayers.append(SbaPlayerRecord(**data))
|
||||
|
||||
# Load all players
|
||||
all_players = []
|
||||
for season in range(1, 13):
|
||||
with open(f"/tmp/players_season_{season}.json", 'r') as f:
|
||||
season_data = json.load(f)
|
||||
|
||||
for data in season_data:
|
||||
all_players.append(PlayerRecord(**data))
|
||||
|
||||
logger.info(f"Loaded {len(sbaplayers)} SbaPlayers and {len(all_players)} player records")
|
||||
return all_players, sbaplayers
|
||||
|
||||
def parse_unmatched_decisions():
|
||||
"""Parse decisions from the unmatched players CSV"""
|
||||
logger.info("Parsing unmatched player decisions...")
|
||||
|
||||
decisions = []
|
||||
csv_file = '/mnt/NV2/Development/major-domo/database/unmatched_players_for_review_updated.csv'
|
||||
|
||||
with open(csv_file, 'r', encoding='utf-8') as f:
|
||||
reader = csv.DictReader(f)
|
||||
|
||||
# Debug: print column names
|
||||
logger.info(f"CSV columns: {reader.fieldnames}")
|
||||
|
||||
for row in reader:
|
||||
resolution = row.get('resolution', '').strip()
|
||||
if not resolution or resolution == 'SKIP':
|
||||
continue
|
||||
|
||||
# Handle encoded column names
|
||||
player_id_key = next((k for k in row.keys() if 'player' in k.lower() and 'id' in k.lower()), 'player_id')
|
||||
bbref_id_key = next((k for k in row.keys() if 'bbref' in k.lower() and 'id' in k.lower()), 'bbref_id')
|
||||
seasons_key = next((k for k in row.keys() if 'seasons' in k.lower() and 'appeared' in k.lower()), 'seasons_appeared')
|
||||
suggested_id_key = next((k for k in row.keys() if 'suggested' in k.lower() and 'sbaplayer' in k.lower() and 'id' in k.lower()), 'suggested_sbaplayer_id')
|
||||
match_type_key = next((k for k in row.keys() if 'match' in k.lower() and 'type' in k.lower()), 'match_type')
|
||||
|
||||
decision = {
|
||||
'player_id': int(row[player_id_key]),
|
||||
'player_name': row['name'],
|
||||
'bbref_id': row[bbref_id_key] if row[bbref_id_key] else None,
|
||||
'seasons_appeared': row[seasons_key],
|
||||
'resolution': resolution,
|
||||
'suggested_sbaplayer_id': row[suggested_id_key],
|
||||
'match_type': row[match_type_key]
|
||||
}
|
||||
decisions.append(decision)
|
||||
|
||||
logger.info(f"Found {len(decisions)} unmatched player decisions")
|
||||
return decisions
|
||||
|
||||
def parse_high_risk_decisions():
|
||||
"""Parse decisions from the high risk matches CSV"""
|
||||
logger.info("Parsing high-risk match decisions...")
|
||||
|
||||
decisions = []
|
||||
csv_file = '/mnt/NV2/Development/major-domo/database/high_risk_player_matches_updated.csv'
|
||||
|
||||
with open(csv_file, 'r', encoding='utf-8') as f:
|
||||
reader = csv.DictReader(f)
|
||||
|
||||
# Debug: print column names
|
||||
logger.info(f"High-risk CSV columns: {reader.fieldnames}")
|
||||
|
||||
for row in reader:
|
||||
resolution = row.get('resolution', '').strip()
|
||||
if not resolution or resolution == 'SKIP':
|
||||
continue
|
||||
|
||||
# Handle encoded column names
|
||||
risk_type_key = next((k for k in row.keys() if 'risk' in k.lower() and 'type' in k.lower()), 'risk_type')
|
||||
player_id_key = next((k for k in row.keys() if 'player' in k.lower() and 'id' in k.lower()), 'player_id')
|
||||
player_name_key = next((k for k in row.keys() if 'player' in k.lower() and 'name' in k.lower()), 'player_name')
|
||||
sba1_id_key = next((k for k in row.keys() if 'sba1' in k.lower() and 'id' in k.lower()), 'sba1_id')
|
||||
sba1_name_key = next((k for k in row.keys() if 'sba1' in k.lower() and 'name' in k.lower()), 'sba1_name')
|
||||
sba2_id_key = next((k for k in row.keys() if 'sba2' in k.lower() and 'id' in k.lower()), 'sba2_id')
|
||||
sba2_name_key = next((k for k in row.keys() if 'sba2' in k.lower() and 'name' in k.lower()), 'sba2_name')
|
||||
|
||||
decision = {
|
||||
'risk_type': row[risk_type_key],
|
||||
'resolution': resolution,
|
||||
'player_id': int(row[player_id_key]) if row[player_id_key] else None,
|
||||
'player_name': row[player_name_key],
|
||||
'sba1_id': int(row[sba1_id_key]) if row[sba1_id_key] else None,
|
||||
'sba1_name': row[sba1_name_key],
|
||||
'sba2_id': int(row[sba2_id_key]) if row[sba2_id_key] else None,
|
||||
'sba2_name': row[sba2_name_key]
|
||||
}
|
||||
decisions.append(decision)
|
||||
|
||||
logger.info(f"Found {len(decisions)} high-risk match decisions")
|
||||
return decisions
|
||||
|
||||
def process_decisions(all_players, sbaplayers, unmatched_decisions, high_risk_decisions):
|
||||
"""Process all decisions and generate new SbaPlayers and assignments"""
|
||||
|
||||
# Create lookup maps
|
||||
sbaplayers_by_id = {sba.id: sba for sba in sbaplayers}
|
||||
players_by_id = {p.id: p for p in all_players}
|
||||
|
||||
# Track what we're creating and assigning
|
||||
new_sbaplayers = []
|
||||
player_assignments = [] # (player_id, sbaplayer_id) pairs
|
||||
sbaplayer_merges = [] # (from_id, to_id) pairs
|
||||
temp_id_counter = 90000 # Start temp IDs at 90000 to avoid conflicts
|
||||
|
||||
logger.info("Processing unmatched player decisions...")
|
||||
|
||||
# Process unmatched player decisions
|
||||
for decision in unmatched_decisions:
|
||||
resolution = decision['resolution']
|
||||
player_id = decision['player_id']
|
||||
player_name = decision['player_name']
|
||||
bbref_id = decision['bbref_id']
|
||||
|
||||
if resolution == 'ACCEPT':
|
||||
# Use suggested SbaPlayer ID
|
||||
suggested_id = decision['suggested_sbaplayer_id']
|
||||
if suggested_id and not suggested_id.startswith('PARTIAL:'):
|
||||
sbaplayer_id = int(suggested_id)
|
||||
|
||||
# Find all players with same identity and assign them
|
||||
if bbref_id:
|
||||
# Group by bbref_id
|
||||
matching_players = [p for p in all_players if p.bbref_id == bbref_id]
|
||||
else:
|
||||
# Group by name (for players without bbref_id)
|
||||
matching_players = [p for p in all_players if p.name == player_name and not p.bbref_id]
|
||||
|
||||
for player in matching_players:
|
||||
player_assignments.append((player.id, sbaplayer_id))
|
||||
|
||||
elif resolution.startswith('USE_SBA_'):
|
||||
# Use specific SbaPlayer ID
|
||||
sbaplayer_id = int(resolution.replace('USE_SBA_', ''))
|
||||
|
||||
# Find all players with same identity
|
||||
if bbref_id:
|
||||
matching_players = [p for p in all_players if p.bbref_id == bbref_id]
|
||||
else:
|
||||
matching_players = [p for p in all_players if p.name == player_name and not p.bbref_id]
|
||||
|
||||
for player in matching_players:
|
||||
player_assignments.append((player.id, sbaplayer_id))
|
||||
|
||||
elif resolution == 'CREATE_NEW':
|
||||
# Create new SbaPlayer
|
||||
name_parts = player_name.strip().split()
|
||||
if len(name_parts) >= 2:
|
||||
first_name = name_parts[0]
|
||||
last_name = ' '.join(name_parts[1:]) # Handle multiple part last names
|
||||
else:
|
||||
first_name = player_name
|
||||
last_name = ""
|
||||
|
||||
new_sba = NewSbaPlayer(
|
||||
first_name=first_name,
|
||||
last_name=last_name,
|
||||
key_bbref=bbref_id,
|
||||
temp_id=temp_id_counter
|
||||
)
|
||||
new_sbaplayers.append(new_sba)
|
||||
|
||||
# Find all players with same identity and assign to new SbaPlayer
|
||||
if bbref_id:
|
||||
matching_players = [p for p in all_players if p.bbref_id == bbref_id]
|
||||
else:
|
||||
matching_players = [p for p in all_players if p.name == player_name and not p.bbref_id]
|
||||
|
||||
for player in matching_players:
|
||||
player_assignments.append((player.id, temp_id_counter))
|
||||
|
||||
temp_id_counter += 1
|
||||
|
||||
logger.info("Processing high-risk match decisions...")
|
||||
|
||||
# Process high-risk decisions
|
||||
for decision in high_risk_decisions:
|
||||
resolution = decision['resolution']
|
||||
risk_type = decision['risk_type']
|
||||
|
||||
if resolution.startswith('MERGE_') and '_INTO_' in resolution:
|
||||
# Parse merge instruction: MERGE_123_INTO_456
|
||||
parts = resolution.replace('MERGE_', '').split('_INTO_')
|
||||
from_id = int(parts[0])
|
||||
to_id = int(parts[1])
|
||||
sbaplayer_merges.append((from_id, to_id))
|
||||
|
||||
elif resolution.startswith('USE_SBA_') and decision['player_id']:
|
||||
# Player ambiguous match resolved
|
||||
sbaplayer_id = int(resolution.replace('USE_SBA_', ''))
|
||||
player_id = decision['player_id']
|
||||
player_name = decision['player_name']
|
||||
|
||||
# Find all players with same name (no bbref_id since these are ambiguous matches)
|
||||
matching_players = [p for p in all_players if p.name == player_name and not p.bbref_id]
|
||||
for player in matching_players:
|
||||
player_assignments.append((player.id, sbaplayer_id))
|
||||
|
||||
logger.info(f"Generated {len(new_sbaplayers)} new SbaPlayers")
|
||||
logger.info(f"Generated {len(player_assignments)} player assignments")
|
||||
logger.info(f"Generated {len(sbaplayer_merges)} SbaPlayer merges")
|
||||
|
||||
return new_sbaplayers, player_assignments, sbaplayer_merges
|
||||
|
||||
def generate_new_sbaplayers_csv(new_sbaplayers):
|
||||
"""Generate CSV file with new SbaPlayers to insert"""
|
||||
output_file = '/mnt/NV2/Development/major-domo/database/new_sbaplayers_to_insert.csv'
|
||||
|
||||
with open(output_file, 'w', newline='') as csvfile:
|
||||
writer = csv.writer(csvfile)
|
||||
writer.writerow(['temp_id', 'first_name', 'last_name', 'key_bbref', 'key_fangraphs', 'key_mlbam', 'key_retro'])
|
||||
|
||||
for sba in new_sbaplayers:
|
||||
writer.writerow([
|
||||
sba.temp_id,
|
||||
sba.first_name,
|
||||
sba.last_name,
|
||||
sba.key_bbref or '',
|
||||
'', # key_fangraphs (empty)
|
||||
'', # key_mlbam (empty)
|
||||
'' # key_retro (empty)
|
||||
])
|
||||
|
||||
logger.info(f"Generated new SbaPlayers CSV: {output_file}")
|
||||
return output_file
|
||||
|
||||
def generate_player_assignments_csv(player_assignments, sbaplayer_merges, all_players, sbaplayers_by_id):
|
||||
"""Generate CSV file with all player assignments"""
|
||||
output_file = '/mnt/NV2/Development/major-domo/database/player_sbaplayer_assignments.csv'
|
||||
|
||||
# Create merge mapping for resolving final IDs
|
||||
merge_mapping = {}
|
||||
for from_id, to_id in sbaplayer_merges:
|
||||
merge_mapping[from_id] = to_id
|
||||
|
||||
players_by_id = {p.id: p for p in all_players}
|
||||
|
||||
with open(output_file, 'w', newline='') as csvfile:
|
||||
writer = csv.writer(csvfile)
|
||||
writer.writerow([
|
||||
'player_id', 'player_name', 'player_season', 'player_bbref_id',
|
||||
'sbaplayer_id', 'sbaplayer_name', 'sbaplayer_bbref', 'assignment_type'
|
||||
])
|
||||
|
||||
for player_id, sbaplayer_id in player_assignments:
|
||||
player = players_by_id[player_id]
|
||||
|
||||
# Resolve final sbaplayer_id (in case of merges)
|
||||
final_sbaplayer_id = merge_mapping.get(sbaplayer_id, sbaplayer_id)
|
||||
|
||||
# Get SbaPlayer info
|
||||
if final_sbaplayer_id >= 90000:
|
||||
# New SbaPlayer (temp ID)
|
||||
sbaplayer_name = f"NEW_TEMP_{final_sbaplayer_id}"
|
||||
sbaplayer_bbref = player.bbref_id or ''
|
||||
assignment_type = 'new_sbaplayer'
|
||||
else:
|
||||
# Existing SbaPlayer
|
||||
if final_sbaplayer_id in sbaplayers_by_id:
|
||||
sba = sbaplayers_by_id[final_sbaplayer_id]
|
||||
sbaplayer_name = f"{sba.first_name} {sba.last_name}"
|
||||
sbaplayer_bbref = sba.key_bbref or ''
|
||||
assignment_type = 'existing_sbaplayer'
|
||||
else:
|
||||
sbaplayer_name = f"UNKNOWN_SBA_{final_sbaplayer_id}"
|
||||
sbaplayer_bbref = ''
|
||||
assignment_type = 'error'
|
||||
|
||||
writer.writerow([
|
||||
player.id,
|
||||
player.name,
|
||||
player.season,
|
||||
player.bbref_id or '',
|
||||
final_sbaplayer_id,
|
||||
sbaplayer_name,
|
||||
sbaplayer_bbref,
|
||||
assignment_type
|
||||
])
|
||||
|
||||
logger.info(f"Generated player assignments CSV: {output_file}")
|
||||
return output_file
|
||||
|
||||
def generate_summary_report(new_sbaplayers, player_assignments, sbaplayer_merges):
|
||||
"""Generate summary report"""
|
||||
summary_file = '/mnt/NV2/Development/major-domo/database/processing_summary.txt'
|
||||
|
||||
with open(summary_file, 'w') as f:
|
||||
f.write("MATCHING DECISIONS PROCESSING SUMMARY\n")
|
||||
f.write("=" * 50 + "\n\n")
|
||||
|
||||
f.write(f"New SbaPlayers to create: {len(new_sbaplayers)}\n")
|
||||
f.write(f"Player assignments to make: {len(player_assignments)}\n")
|
||||
f.write(f"SbaPlayer merges to perform: {len(sbaplayer_merges)}\n\n")
|
||||
|
||||
f.write("FILES GENERATED:\n")
|
||||
f.write("1. new_sbaplayers_to_insert.csv - New SbaPlayer records to create\n")
|
||||
f.write("2. player_sbaplayer_assignments.csv - All player -> sbaplayer assignments\n\n")
|
||||
|
||||
f.write("SbaPlayer Merges:\n")
|
||||
for from_id, to_id in sbaplayer_merges:
|
||||
f.write(f" - Merge SbaPlayer {from_id} into {to_id}\n")
|
||||
|
||||
f.write(f"\nNEXT STEPS:\n")
|
||||
f.write("1. Review the generated CSV files\n")
|
||||
f.write("2. Execute SbaPlayer merges first (if any)\n")
|
||||
f.write("3. Insert new SbaPlayers and get their real IDs\n")
|
||||
f.write("4. Update all player records with sbaplayer_id assignments\n")
|
||||
|
||||
logger.info(f"Generated summary report: {summary_file}")
|
||||
|
||||
def main():
|
||||
"""Main processing function"""
|
||||
logger.info("Starting processing of matching decisions...")
|
||||
|
||||
# Load data
|
||||
all_players, sbaplayers = load_cached_data()
|
||||
sbaplayers_by_id = {sba.id: sba for sba in sbaplayers}
|
||||
|
||||
# Parse decisions
|
||||
unmatched_decisions = parse_unmatched_decisions()
|
||||
high_risk_decisions = parse_high_risk_decisions()
|
||||
|
||||
# Process decisions
|
||||
new_sbaplayers, player_assignments, sbaplayer_merges = process_decisions(
|
||||
all_players, sbaplayers, unmatched_decisions, high_risk_decisions
|
||||
)
|
||||
|
||||
# Generate output files
|
||||
new_sba_file = generate_new_sbaplayers_csv(new_sbaplayers)
|
||||
assignments_file = generate_player_assignments_csv(
|
||||
player_assignments, sbaplayer_merges, all_players, sbaplayers_by_id
|
||||
)
|
||||
generate_summary_report(new_sbaplayers, player_assignments, sbaplayer_merges)
|
||||
|
||||
logger.info("\n=== PROCESSING COMPLETE ===")
|
||||
logger.info(f"New SbaPlayers CSV: {new_sba_file}")
|
||||
logger.info(f"Player assignments CSV: {assignments_file}")
|
||||
logger.info(f"Summary: processing_summary.txt")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@ -0,0 +1,18 @@
|
||||
MATCHING DECISIONS PROCESSING SUMMARY
|
||||
==================================================
|
||||
|
||||
New SbaPlayers to create: 0
|
||||
Player assignments to make: 120
|
||||
SbaPlayer merges to perform: 0
|
||||
|
||||
FILES GENERATED:
|
||||
1. new_sbaplayers_to_insert.csv - New SbaPlayer records to create
|
||||
2. player_sbaplayer_assignments.csv - All player -> sbaplayer assignments
|
||||
|
||||
SbaPlayer Merges:
|
||||
|
||||
NEXT STEPS:
|
||||
1. Review the generated CSV files
|
||||
2. Execute SbaPlayer merges first (if any)
|
||||
3. Insert new SbaPlayers and get their real IDs
|
||||
4. Update all player records with sbaplayer_id assignments
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,13 @@
|
||||
UNMATCHED PLAYERS SUMMARY
|
||||
==================================================
|
||||
|
||||
Players with bbref_id but no SbaPlayer match: 13
|
||||
Players without bbref_id: 1430
|
||||
Total unique unmatched players: 1443
|
||||
|
||||
NEXT STEPS:
|
||||
1. Review the CSV file: /tmp/unmatched_players_for_review.csv
|
||||
2. For players with suggested matches, verify they are correct
|
||||
3. For players marked 'PARTIAL:', carefully review the suggestion
|
||||
4. Fill in the suggested_sbaplayer_id column for matches you want to use
|
||||
5. Leave suggested_sbaplayer_id empty for players needing new SbaPlayer records
|
||||
@ -0,0 +1,174 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Add resolution columns to the CSV files for manual review
|
||||
"""
|
||||
import csv
|
||||
import logging
|
||||
|
||||
logging.basicConfig(level=logging.INFO)
|
||||
logger = logging.getLogger('UpdateCSV')
|
||||
|
||||
def add_resolution_column_to_unmatched():
|
||||
"""Add resolution column to unmatched players CSV"""
|
||||
input_file = '/mnt/NV2/Development/major-domo/database/unmatched_players_for_review.csv'
|
||||
output_file = '/mnt/NV2/Development/major-domo/database/unmatched_players_for_review_updated.csv'
|
||||
|
||||
with open(input_file, 'r') as infile:
|
||||
reader = csv.DictReader(infile)
|
||||
|
||||
# Read all rows
|
||||
rows = list(reader)
|
||||
|
||||
# Add resolution column to each row
|
||||
for row in rows:
|
||||
row['resolution'] = '' # Empty for manual filling
|
||||
|
||||
# Add some helpful comments based on the suggested match
|
||||
if row['suggested_sbaplayer_id'] and not row['suggested_sbaplayer_id'].startswith('PARTIAL:'):
|
||||
row['resolution'] = 'ACCEPT' # Pre-fill exact matches as ACCEPT
|
||||
elif row['suggested_sbaplayer_id'].startswith('PARTIAL:'):
|
||||
row['resolution'] = 'REVIEW' # Mark partial matches for review
|
||||
else:
|
||||
row['resolution'] = 'CREATE_NEW' # Default for no suggestions
|
||||
|
||||
# Write updated CSV
|
||||
with open(output_file, 'w', newline='') as outfile:
|
||||
fieldnames = list(reader.fieldnames) + ['resolution']
|
||||
writer = csv.DictWriter(outfile, fieldnames=fieldnames)
|
||||
|
||||
writer.writeheader()
|
||||
writer.writerows(rows)
|
||||
|
||||
logger.info(f"Updated unmatched players CSV: {output_file}")
|
||||
return output_file
|
||||
|
||||
def add_resolution_column_to_high_risk():
|
||||
"""Add resolution column to high risk matches CSV"""
|
||||
input_file = '/mnt/NV2/Development/major-domo/database/high_risk_player_matches.csv'
|
||||
output_file = '/mnt/NV2/Development/major-domo/database/high_risk_player_matches_updated.csv'
|
||||
|
||||
with open(input_file, 'r') as infile:
|
||||
reader = csv.DictReader(infile)
|
||||
|
||||
# Read all rows
|
||||
rows = list(reader)
|
||||
|
||||
# Add resolution column to each row
|
||||
for row in rows:
|
||||
row['resolution'] = '' # Empty for manual filling
|
||||
|
||||
# Add helpful pre-fills based on risk type and bbref_id presence
|
||||
if row['risk_type'] == 'sbaplayer_conflict':
|
||||
# Check if both have bbref_ids - if so, they are definitely different people
|
||||
sba1_bbref = row['sba1_bbref'].strip()
|
||||
sba2_bbref = row['sba2_bbref'].strip()
|
||||
|
||||
if sba1_bbref and sba2_bbref and sba1_bbref != sba2_bbref:
|
||||
# Different bbref_ids = definitely different people
|
||||
row['resolution'] = 'DIFFERENT_PEOPLE'
|
||||
elif not sba1_bbref and not sba2_bbref:
|
||||
# Neither has bbref_id - could be duplicate
|
||||
if row['similarity_score'] == '1.000':
|
||||
row['resolution'] = f"MERGE_{row['sba2_id']}_INTO_{row['sba1_id']}"
|
||||
else:
|
||||
row['resolution'] = 'DIFFERENT_PEOPLE'
|
||||
elif sba1_bbref and not sba2_bbref:
|
||||
# One has bbref_id, one doesn't - could be duplicate needing bbref_id
|
||||
row['resolution'] = f"MERGE_{row['sba2_id']}_INTO_{row['sba1_id']}"
|
||||
elif sba2_bbref and not sba1_bbref:
|
||||
# One has bbref_id, one doesn't - could be duplicate needing bbref_id
|
||||
row['resolution'] = f"MERGE_{row['sba1_id']}_INTO_{row['sba2_id']}"
|
||||
else:
|
||||
# Same bbref_id - definitely duplicate
|
||||
row['resolution'] = f"MERGE_{row['sba2_id']}_INTO_{row['sba1_id']}"
|
||||
|
||||
elif row['risk_type'] == 'player_ambiguous_match':
|
||||
row['resolution'] = f"USE_SBA_{row['sba1_id']}" # Pre-select first option
|
||||
elif row['risk_type'] == 'middle_initial_conflict':
|
||||
row['resolution'] = 'DIFFERENT_PEOPLE'
|
||||
|
||||
# Write updated CSV
|
||||
with open(output_file, 'w', newline='') as outfile:
|
||||
fieldnames = list(reader.fieldnames) + ['resolution']
|
||||
writer = csv.DictWriter(outfile, fieldnames=fieldnames)
|
||||
|
||||
writer.writeheader()
|
||||
writer.writerows(rows)
|
||||
|
||||
logger.info(f"Updated high risk matches CSV: {output_file}")
|
||||
return output_file
|
||||
|
||||
def create_instructions_file():
|
||||
"""Create instructions file for manual review"""
|
||||
instructions = """
|
||||
# CSV REVIEW INSTRUCTIONS
|
||||
|
||||
## File 1: unmatched_players_for_review_updated.csv
|
||||
|
||||
**Resolution Column Values:**
|
||||
- `ACCEPT` - Use the suggested_sbaplayer_id (pre-filled for exact matches)
|
||||
- `USE_SBA_123` - Use specific SbaPlayer ID 123 instead of suggestion
|
||||
- `CREATE_NEW` - Create new SbaPlayer record for this player
|
||||
- `SKIP` - Skip this player for now (won't be processed)
|
||||
- `REVIEW` - Needs manual review (pre-filled for partial matches)
|
||||
|
||||
**Pre-filled Values:**
|
||||
- Exact name matches are pre-filled as `ACCEPT`
|
||||
- Partial matches are marked as `REVIEW`
|
||||
- No suggestions are marked as `CREATE_NEW`
|
||||
|
||||
## File 2: high_risk_player_matches_updated.csv
|
||||
|
||||
**Resolution Column Values:**
|
||||
- `MERGE_123_INTO_456` - Merge SbaPlayer 123 into SbaPlayer 456
|
||||
- `DIFFERENT_PEOPLE` - These are actually different people, keep separate
|
||||
- `USE_SBA_123` - For player matches, use this specific SbaPlayer ID
|
||||
- `CREATE_NEW` - Create new SbaPlayer record
|
||||
- `SKIP` - Skip this for now
|
||||
|
||||
**Pre-filled Logic for SbaPlayer Conflicts:**
|
||||
- Different bbref_ids = `DIFFERENT_PEOPLE` (bbref_ids are globally unique)
|
||||
- Same bbref_id = `MERGE` (definitely duplicates)
|
||||
- One has bbref_id, one doesn't = `MERGE` suggestion (review needed)
|
||||
- Neither has bbref_id + identical names = `MERGE` suggestion
|
||||
- Player ambiguous matches pre-select the first suggested SbaPlayer
|
||||
- Middle initial conflicts are marked as `DIFFERENT_PEOPLE`
|
||||
|
||||
## Important Notes:
|
||||
- **bbref_ids are globally unique** - trust them completely
|
||||
- If two SbaPlayers have different bbref_ids, they are different people
|
||||
- If one has bbref_id and one doesn't, they might be the same person
|
||||
|
||||
## Next Steps:
|
||||
1. Review and edit the resolution columns in both files
|
||||
2. Save the files when done
|
||||
3. Let Claude know you're ready to process the changes
|
||||
|
||||
## Common Patterns:
|
||||
- bbref_id mismatches (like "HALP") should usually be `CREATE_NEW`
|
||||
- Different bbref_ids = always different people
|
||||
- Common names like "Carlos Martinez" need careful review
|
||||
- Middle initials usually indicate different people
|
||||
"""
|
||||
|
||||
with open('/mnt/NV2/Development/major-domo/database/CSV_REVIEW_INSTRUCTIONS.txt', 'w') as f:
|
||||
f.write(instructions)
|
||||
|
||||
logger.info("Created instructions file: CSV_REVIEW_INSTRUCTIONS.txt")
|
||||
|
||||
def main():
|
||||
"""Update both CSV files with resolution columns"""
|
||||
logger.info("Adding resolution columns to CSV files...")
|
||||
|
||||
unmatched_file = add_resolution_column_to_unmatched()
|
||||
high_risk_file = add_resolution_column_to_high_risk()
|
||||
create_instructions_file()
|
||||
|
||||
logger.info(f"\n=== CSV FILES UPDATED ===")
|
||||
logger.info(f"Unmatched players: {unmatched_file}")
|
||||
logger.info(f"High risk matches: {high_risk_file}")
|
||||
logger.info(f"Instructions: CSV_REVIEW_INSTRUCTIONS.txt")
|
||||
logger.info(f"\nPlease review and edit the 'resolution' column in both files.")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@ -0,0 +1,124 @@
|
||||
# System Prompt: Player-to-SbaPlayer Matching Project Continuation
|
||||
|
||||
## Project Context
|
||||
You are working on a critical database linking project for the Major Domo SBA (Strat-o-Matic Baseball Association) fantasy league system. The goal is to link ~12,000 player-season records to SbaPlayer records to enable career stat tracking across seasons 1-12.
|
||||
|
||||
## Problem Background
|
||||
The `players` table contains individual season records (e.g., "Aaron Judge season 8", "Aaron Judge season 9"). The `sbaplayers` table contains unique player identities with MLB keys. Currently, the `players.sbaplayer_id` field is null for all records, breaking career stat tracking.
|
||||
|
||||
**Previous Failed Approach**: An earlier attempt created 1,323 "new" SbaPlayer records when most players already existed (e.g., tried to create new "Taijuan Walker" when SbaPlayer ID 2105 already existed with key_bbref "walketa01").
|
||||
|
||||
## Current Successful Approach
|
||||
|
||||
### Multi-Tier Matching Strategy
|
||||
1. **Tier 1 (bbref_id matching)**: Match `player.bbref_id` to `sbaplayer.key_bbref` - highest confidence
|
||||
2. **Tier 2 (exact name matching)**: Normalized exact name matching for players without bbref_id
|
||||
3. **Tier 3 (manual review)**: Human review of remaining unmatched players
|
||||
|
||||
### Current Status - EXCELLENT PROGRESS
|
||||
- **✅ 11,632 players matched automatically** (95.1% of all 12,232 players)
|
||||
- Tier 1: 6,764 players via bbref_id matching
|
||||
- Tier 2: 4,868 players via exact name matching
|
||||
- **📋 Only 32 unique players need manual review** (down from 1,323!)
|
||||
|
||||
### Files Structure
|
||||
```
|
||||
/mnt/NV2/Development/major-domo/database/player-to-sbaplayer-matching/
|
||||
├── comprehensive_player_matching.py # Main analysis script
|
||||
├── generate_new_sbaplayers_list.py # Generate review list
|
||||
├── matching_report.txt # Detailed results
|
||||
├── new_sbaplayers_for_review.csv # Manual review needed
|
||||
├── new_sbaplayers_summary.txt # Summary
|
||||
├── matching.log # Detailed logs
|
||||
└── SYSTEM_PROMPT_FOR_CONTINUATION.md # This file
|
||||
```
|
||||
|
||||
### Cached Data Location
|
||||
All API data is cached in `/tmp/` to avoid repeated API calls:
|
||||
- `/tmp/sbaplayers.json` - All 2,234 SbaPlayer records
|
||||
- `/tmp/players_season_{1-12}.json` - All player records by season
|
||||
|
||||
## Current Task: Manual Review Phase
|
||||
|
||||
### What Needs Review
|
||||
The file `new_sbaplayers_for_review.csv` contains 32 unique players needing manual decisions. Examples:
|
||||
|
||||
**Obvious Existing Matches (script found these):**
|
||||
- Diego Castillo → SbaPlayer ID 341
|
||||
- Javy Guerra → SbaPlayer ID 784
|
||||
- Will Smith → SbaPlayer ID 1841
|
||||
- Logan Allen → SbaPlayer ID 45
|
||||
|
||||
**Requires Human Decision:**
|
||||
- Michael A Taylor → Maybe SbaPlayer ID 1963 "Michael Taylor" (missing middle initial?)
|
||||
- Josh Fuentes → Maybe SbaPlayer ID 664 "Joshua Fuentes" (Josh vs Joshua?)
|
||||
- Luis Garcia variants (multiple similar players)
|
||||
- bbref_id "HALP" (corrupted data)
|
||||
|
||||
### Review Process
|
||||
User should edit `new_sbaplayers_for_review.csv`:
|
||||
- Column `your_decision_sbaplayer_id`: Enter existing SbaPlayer ID or leave blank for new record
|
||||
- Column `your_decision_notes`: Add any comments
|
||||
|
||||
## Next Steps After Review
|
||||
1. **Process user decisions** from the reviewed CSV
|
||||
2. **Generate final assignment files**:
|
||||
- `new_sbaplayers_to_insert.csv` - New SbaPlayer records to create
|
||||
- `player_sbaplayer_assignments.csv` - All 12,232 player assignments
|
||||
3. **Execute database updates** via API calls
|
||||
4. **Verify career stat tracking** works correctly
|
||||
|
||||
## Key Technical Details
|
||||
|
||||
### Database Schema
|
||||
- `players` table: season-specific records with `sbaplayer_id` (currently null)
|
||||
- `sbaplayers` table: unique player identities with MLB keys (`key_bbref`, `key_fangraphs`, etc.)
|
||||
|
||||
### API Endpoints
|
||||
- Production API: `https://api.sba.manticorum.com/`
|
||||
- Key endpoints: `/players?season=X`, `/sbaplayers`, `/players/{id}` (PATCH)
|
||||
|
||||
### Matching Logic
|
||||
```python
|
||||
# Tier 1: bbref_id matching
|
||||
if player.bbref_id and player.bbref_id in sbaplayer_bbref_map:
|
||||
match = sbaplayer_bbref_map[player.bbref_id]
|
||||
|
||||
# Tier 2: normalized name matching
|
||||
normalized_name = normalize_name(player.name)
|
||||
if normalized_name in sbaplayer_name_map and len(matches) == 1:
|
||||
match = sbaplayer_name_map[normalized_name][0]
|
||||
```
|
||||
|
||||
### Name Normalization Rules
|
||||
- Lowercase, remove apostrophes/periods
|
||||
- Handle nicknames (Mike/Michael, Will/William, etc.)
|
||||
- Remove Jr/Sr suffixes
|
||||
- Replace hyphens with spaces
|
||||
|
||||
## Success Metrics
|
||||
- **95.1% automatic matching achieved** ✅
|
||||
- **Only 32 manual decisions needed** ✅
|
||||
- **Avoided creating 1,300+ duplicate records** ✅
|
||||
- **Career stat tracking will work for 11,632 players immediately** ✅
|
||||
|
||||
## Potential Issues to Watch
|
||||
1. **Multiple Luis Garcia players** - need to distinguish carefully
|
||||
2. **Middle initial variations** (Michael A Taylor vs Michael Taylor)
|
||||
3. **Nickname variations** (Josh vs Joshua)
|
||||
4. **Corrupted bbref_ids** (like "HALP")
|
||||
|
||||
## Database Safety
|
||||
- All changes should be **API-based** (no direct database access)
|
||||
- **Review all assignments** before execution
|
||||
- **Backup approach**: Can revert by setting `sbaplayer_id` back to null
|
||||
- **Verification**: Test career stats for sample players after completion
|
||||
|
||||
## How to Continue
|
||||
1. **Wait for user to complete manual review** of `new_sbaplayers_for_review.csv`
|
||||
2. **Process the reviewed decisions** into final assignment files
|
||||
3. **Show user the final assignments** for verification before execution
|
||||
4. **Execute the database updates** via API calls
|
||||
5. **Verify career stat functionality** works correctly
|
||||
|
||||
The groundwork is solid - we just need manual review of 32 cases to complete this major database improvement project.
|
||||
@ -0,0 +1,399 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Comprehensive Player to SbaPlayer Matching System
|
||||
Uses multi-tier matching strategy to avoid creating duplicate SbaPlayer records
|
||||
"""
|
||||
import json
|
||||
import csv
|
||||
import logging
|
||||
import re
|
||||
from dataclasses import dataclass
|
||||
from typing import Dict, List, Set, Optional, Tuple
|
||||
from collections import defaultdict
|
||||
import difflib
|
||||
|
||||
# Set up logging
|
||||
logging.basicConfig(
|
||||
level=logging.INFO,
|
||||
format='%(asctime)s - %(levelname)s - %(message)s',
|
||||
handlers=[
|
||||
logging.FileHandler('/mnt/NV2/Development/major-domo/database/player-to-sbaplayer-matching/matching.log'),
|
||||
logging.StreamHandler()
|
||||
]
|
||||
)
|
||||
logger = logging.getLogger('PlayerMatching')
|
||||
|
||||
@dataclass
|
||||
class PlayerRecord:
|
||||
id: int
|
||||
name: str
|
||||
season: int
|
||||
bbref_id: Optional[str] = None
|
||||
sbaplayer_id: Optional[int] = None
|
||||
|
||||
@dataclass
|
||||
class SbaPlayerRecord:
|
||||
id: int
|
||||
first_name: str
|
||||
last_name: str
|
||||
key_bbref: Optional[str] = None
|
||||
key_fangraphs: Optional[int] = None
|
||||
key_mlbam: Optional[int] = None
|
||||
key_retro: Optional[str] = None
|
||||
|
||||
@property
|
||||
def full_name(self) -> str:
|
||||
return f"{self.first_name} {self.last_name}"
|
||||
|
||||
@dataclass
|
||||
class MatchResult:
|
||||
player_id: int
|
||||
player_name: str
|
||||
player_bbref_id: Optional[str]
|
||||
sbaplayer_id: int
|
||||
sbaplayer_name: str
|
||||
sbaplayer_bbref: Optional[str]
|
||||
match_tier: str
|
||||
confidence: float
|
||||
seasons: List[int]
|
||||
|
||||
def normalize_name(name: str) -> str:
|
||||
"""Normalize name for consistent matching"""
|
||||
if not name:
|
||||
return ""
|
||||
|
||||
# Convert to lowercase
|
||||
normalized = name.lower().strip()
|
||||
|
||||
# Remove common suffixes
|
||||
normalized = re.sub(r'\s+(jr|sr|ii|iii|iv)\.?$', '', normalized)
|
||||
|
||||
# Replace periods and apostrophes
|
||||
normalized = re.sub(r"['\.]", "", normalized)
|
||||
|
||||
# Replace hyphens with spaces
|
||||
normalized = re.sub(r'-', ' ', normalized)
|
||||
|
||||
# Normalize whitespace
|
||||
normalized = re.sub(r'\s+', ' ', normalized)
|
||||
|
||||
return normalized.strip()
|
||||
|
||||
def create_name_variants(name: str) -> Set[str]:
|
||||
"""Create common name variants for matching"""
|
||||
variants = set()
|
||||
normalized = normalize_name(name)
|
||||
variants.add(normalized)
|
||||
|
||||
# Common nickname mappings
|
||||
nickname_map = {
|
||||
'michael': ['mike', 'micky'],
|
||||
'mike': ['michael'],
|
||||
'william': ['will', 'bill', 'billy'],
|
||||
'will': ['william'],
|
||||
'bill': ['william'],
|
||||
'robert': ['rob', 'bob', 'bobby'],
|
||||
'rob': ['robert'],
|
||||
'bob': ['robert'],
|
||||
'james': ['jim', 'jimmy'],
|
||||
'jim': ['james'],
|
||||
'thomas': ['tom', 'tommy'],
|
||||
'tom': ['thomas'],
|
||||
'joseph': ['joe', 'joey'],
|
||||
'joe': ['joseph'],
|
||||
'christopher': ['chris'],
|
||||
'chris': ['christopher'],
|
||||
'anthony': ['tony'],
|
||||
'tony': ['anthony'],
|
||||
'andrew': ['andy', 'drew'],
|
||||
'andy': ['andrew'],
|
||||
'drew': ['andrew'],
|
||||
'jonathan': ['jon'],
|
||||
'jon': ['jonathan'],
|
||||
'matthew': ['matt'],
|
||||
'matt': ['matthew'],
|
||||
'nicholas': ['nick'],
|
||||
'nick': ['nicholas'],
|
||||
'alexander': ['alex'],
|
||||
'alex': ['alexander'],
|
||||
'benjamin': ['ben'],
|
||||
'ben': ['benjamin'],
|
||||
'samuel': ['sam'],
|
||||
'sam': ['samuel'],
|
||||
'daniel': ['dan', 'danny'],
|
||||
'dan': ['daniel'],
|
||||
'danny': ['daniel'],
|
||||
'david': ['dave'],
|
||||
'dave': ['david'],
|
||||
'edward': ['ed', 'eddie'],
|
||||
'ed': ['edward'],
|
||||
'eddie': ['edward']
|
||||
}
|
||||
|
||||
parts = normalized.split()
|
||||
if len(parts) >= 2:
|
||||
first_name = parts[0]
|
||||
rest = ' '.join(parts[1:])
|
||||
|
||||
# Add nickname variants
|
||||
if first_name in nickname_map:
|
||||
for nickname in nickname_map[first_name]:
|
||||
variants.add(f"{nickname} {rest}")
|
||||
|
||||
return variants
|
||||
|
||||
def load_cached_data():
|
||||
"""Load all cached player and SbaPlayer data"""
|
||||
logger.info("Loading cached data...")
|
||||
|
||||
# Load SbaPlayers
|
||||
with open('/tmp/sbaplayers.json', 'r') as f:
|
||||
sbaplayer_data = json.load(f)
|
||||
|
||||
sbaplayers = []
|
||||
for data in sbaplayer_data:
|
||||
sbaplayers.append(SbaPlayerRecord(**data))
|
||||
|
||||
# Load all players
|
||||
all_players = []
|
||||
for season in range(1, 13):
|
||||
with open(f"/tmp/players_season_{season}.json", 'r') as f:
|
||||
season_data = json.load(f)
|
||||
|
||||
for data in season_data:
|
||||
all_players.append(PlayerRecord(**data))
|
||||
|
||||
logger.info(f"Loaded {len(sbaplayers)} SbaPlayers and {len(all_players)} player records")
|
||||
return all_players, sbaplayers
|
||||
|
||||
def analyze_data_coverage(all_players: List[PlayerRecord], sbaplayers: List[SbaPlayerRecord]):
|
||||
"""Analyze data coverage and patterns"""
|
||||
logger.info("Analyzing data coverage...")
|
||||
|
||||
# SbaPlayer analysis
|
||||
sba_with_bbref = sum(1 for sba in sbaplayers if sba.key_bbref)
|
||||
sba_with_fangraphs = sum(1 for sba in sbaplayers if sba.key_fangraphs)
|
||||
|
||||
logger.info(f"SbaPlayer coverage:")
|
||||
logger.info(f" Total SbaPlayers: {len(sbaplayers)}")
|
||||
logger.info(f" With key_bbref: {sba_with_bbref} ({sba_with_bbref/len(sbaplayers)*100:.1f}%)")
|
||||
logger.info(f" With key_fangraphs: {sba_with_fangraphs} ({sba_with_fangraphs/len(sbaplayers)*100:.1f}%)")
|
||||
|
||||
# Player analysis
|
||||
players_with_bbref = sum(1 for p in all_players if p.bbref_id)
|
||||
|
||||
logger.info(f"Player coverage:")
|
||||
logger.info(f" Total player records: {len(all_players)}")
|
||||
logger.info(f" With bbref_id: {players_with_bbref} ({players_with_bbref/len(all_players)*100:.1f}%)")
|
||||
|
||||
# Check for existing assignments
|
||||
players_with_sbaplayer = sum(1 for p in all_players if p.sbaplayer_id)
|
||||
logger.info(f" Already assigned to SbaPlayer: {players_with_sbaplayer}")
|
||||
|
||||
def create_matching_maps(sbaplayers: List[SbaPlayerRecord]) -> Tuple[Dict, Dict]:
|
||||
"""Create lookup maps for efficient matching"""
|
||||
logger.info("Creating matching maps...")
|
||||
|
||||
# Map by bbref_id
|
||||
bbref_map = {}
|
||||
for sba in sbaplayers:
|
||||
if sba.key_bbref:
|
||||
bbref_map[sba.key_bbref] = sba
|
||||
|
||||
# Map by normalized name (with variants)
|
||||
name_map = defaultdict(list)
|
||||
for sba in sbaplayers:
|
||||
variants = create_name_variants(sba.full_name)
|
||||
for variant in variants:
|
||||
name_map[variant].append(sba)
|
||||
|
||||
logger.info(f"Created bbref_id map: {len(bbref_map)} entries")
|
||||
logger.info(f"Created name map: {len(name_map)} entries")
|
||||
|
||||
return bbref_map, name_map
|
||||
|
||||
def match_players_tier1_bbref(all_players: List[PlayerRecord], bbref_map: Dict) -> List[MatchResult]:
|
||||
"""Tier 1: Exact bbref_id matching"""
|
||||
logger.info("Tier 1: Matching by bbref_id...")
|
||||
|
||||
matches = []
|
||||
unique_players = {} # Group by bbref_id to avoid duplicates
|
||||
|
||||
# Group players by bbref_id
|
||||
for player in all_players:
|
||||
if player.bbref_id:
|
||||
if player.bbref_id not in unique_players:
|
||||
unique_players[player.bbref_id] = []
|
||||
unique_players[player.bbref_id].append(player)
|
||||
|
||||
# Match each unique bbref_id
|
||||
for bbref_id, players in unique_players.items():
|
||||
if bbref_id in bbref_map:
|
||||
sba = bbref_map[bbref_id]
|
||||
seasons = [p.season for p in players]
|
||||
|
||||
# Create match result for all players with this bbref_id
|
||||
for player in players:
|
||||
match = MatchResult(
|
||||
player_id=player.id,
|
||||
player_name=player.name,
|
||||
player_bbref_id=bbref_id,
|
||||
sbaplayer_id=sba.id,
|
||||
sbaplayer_name=sba.full_name,
|
||||
sbaplayer_bbref=sba.key_bbref,
|
||||
match_tier="tier1_bbref",
|
||||
confidence=1.0,
|
||||
seasons=seasons
|
||||
)
|
||||
matches.append(match)
|
||||
|
||||
logger.info(f"Tier 1 matches: {len(matches)} player records")
|
||||
return matches
|
||||
|
||||
def match_players_tier2_name(all_players: List[PlayerRecord], name_map: Dict,
|
||||
tier1_matches: List[MatchResult]) -> List[MatchResult]:
|
||||
"""Tier 2: Exact normalized name matching for players without bbref_id"""
|
||||
logger.info("Tier 2: Matching by exact name...")
|
||||
|
||||
# Get player IDs already matched in tier 1
|
||||
matched_player_ids = {match.player_id for match in tier1_matches}
|
||||
|
||||
matches = []
|
||||
unique_players = {} # Group by name
|
||||
|
||||
# Group remaining players by name
|
||||
for player in all_players:
|
||||
if player.id not in matched_player_ids and not player.bbref_id:
|
||||
normalized_name = normalize_name(player.name)
|
||||
if normalized_name not in unique_players:
|
||||
unique_players[normalized_name] = []
|
||||
unique_players[normalized_name].append(player)
|
||||
|
||||
# Match each unique name
|
||||
for normalized_name, players in unique_players.items():
|
||||
if normalized_name in name_map:
|
||||
potential_sba_matches = name_map[normalized_name]
|
||||
|
||||
if len(potential_sba_matches) == 1:
|
||||
# Unambiguous match
|
||||
sba = potential_sba_matches[0]
|
||||
seasons = [p.season for p in players]
|
||||
|
||||
for player in players:
|
||||
match = MatchResult(
|
||||
player_id=player.id,
|
||||
player_name=player.name,
|
||||
player_bbref_id=None,
|
||||
sbaplayer_id=sba.id,
|
||||
sbaplayer_name=sba.full_name,
|
||||
sbaplayer_bbref=sba.key_bbref,
|
||||
match_tier="tier2_exact_name",
|
||||
confidence=0.95,
|
||||
seasons=seasons
|
||||
)
|
||||
matches.append(match)
|
||||
# Note: Ambiguous matches (multiple SbaPlayers) will be handled in tier 3
|
||||
|
||||
logger.info(f"Tier 2 matches: {len(matches)} player records")
|
||||
return matches
|
||||
|
||||
def find_unmatched_players(all_players: List[PlayerRecord], tier1_matches: List[MatchResult],
|
||||
tier2_matches: List[MatchResult]) -> List[PlayerRecord]:
|
||||
"""Find players that still need matching"""
|
||||
matched_player_ids = set()
|
||||
for match in tier1_matches + tier2_matches:
|
||||
matched_player_ids.add(match.player_id)
|
||||
|
||||
unmatched = [p for p in all_players if p.id not in matched_player_ids]
|
||||
|
||||
# Group unmatched players by unique identifier
|
||||
unique_unmatched = {}
|
||||
for player in unmatched:
|
||||
if player.bbref_id:
|
||||
key = f"bbref:{player.bbref_id}"
|
||||
else:
|
||||
key = f"name:{normalize_name(player.name)}"
|
||||
|
||||
if key not in unique_unmatched:
|
||||
unique_unmatched[key] = []
|
||||
unique_unmatched[key].append(player)
|
||||
|
||||
logger.info(f"Unmatched: {len(unmatched)} player records ({len(unique_unmatched)} unique players)")
|
||||
return unmatched, unique_unmatched
|
||||
|
||||
def generate_matching_report(tier1_matches: List[MatchResult], tier2_matches: List[MatchResult],
|
||||
unmatched: List[PlayerRecord], unique_unmatched: Dict):
|
||||
"""Generate comprehensive matching report"""
|
||||
logger.info("Generating matching report...")
|
||||
|
||||
# Summary statistics
|
||||
total_tier1 = len(tier1_matches)
|
||||
total_tier2 = len(tier2_matches)
|
||||
total_matched = total_tier1 + total_tier2
|
||||
total_unmatched = len(unmatched)
|
||||
|
||||
with open('/mnt/NV2/Development/major-domo/database/player-to-sbaplayer-matching/matching_report.txt', 'w') as f:
|
||||
f.write("COMPREHENSIVE PLAYER MATCHING REPORT\n")
|
||||
f.write("=" * 50 + "\n\n")
|
||||
|
||||
f.write("MATCHING SUMMARY:\n")
|
||||
f.write(f" Tier 1 (bbref_id): {total_tier1:,} player records\n")
|
||||
f.write(f" Tier 2 (exact name): {total_tier2:,} player records\n")
|
||||
f.write(f" Total matched: {total_matched:,} player records\n")
|
||||
f.write(f" Unmatched: {total_unmatched:,} player records ({len(unique_unmatched)} unique players)\n\n")
|
||||
|
||||
f.write("TIER 1 EXAMPLES (bbref_id matches):\n")
|
||||
for i, match in enumerate(tier1_matches[:10]):
|
||||
f.write(f" {match.player_name} ({match.player_bbref_id}) → {match.sbaplayer_name} (ID: {match.sbaplayer_id})\n")
|
||||
if len(tier1_matches) > 10:
|
||||
f.write(f" ... and {len(tier1_matches) - 10} more\n")
|
||||
f.write("\n")
|
||||
|
||||
f.write("TIER 2 EXAMPLES (exact name matches):\n")
|
||||
for i, match in enumerate(tier2_matches[:10]):
|
||||
f.write(f" {match.player_name} → {match.sbaplayer_name} (ID: {match.sbaplayer_id})\n")
|
||||
if len(tier2_matches) > 10:
|
||||
f.write(f" ... and {len(tier2_matches) - 10} more\n")
|
||||
f.write("\n")
|
||||
|
||||
f.write("SAMPLE UNMATCHED PLAYERS (need new SbaPlayer records):\n")
|
||||
sample_unmatched = list(unique_unmatched.items())[:20]
|
||||
for key, players in sample_unmatched:
|
||||
representative = players[0] # Show one representative
|
||||
seasons = sorted([p.season for p in players])
|
||||
f.write(f" {representative.name} (bbref: {representative.bbref_id or 'None'}) - seasons {seasons}\n")
|
||||
if len(unique_unmatched) > 20:
|
||||
f.write(f" ... and {len(unique_unmatched) - 20} more unique players\n")
|
||||
|
||||
logger.info("Matching report generated: matching_report.txt")
|
||||
|
||||
def main():
|
||||
"""Main matching process"""
|
||||
logger.info("Starting comprehensive player matching...")
|
||||
|
||||
# Load data
|
||||
all_players, sbaplayers = load_cached_data()
|
||||
|
||||
# Analyze coverage
|
||||
analyze_data_coverage(all_players, sbaplayers)
|
||||
|
||||
# Create matching maps
|
||||
bbref_map, name_map = create_matching_maps(sbaplayers)
|
||||
|
||||
# Tier 1: bbref_id matching
|
||||
tier1_matches = match_players_tier1_bbref(all_players, bbref_map)
|
||||
|
||||
# Tier 2: exact name matching
|
||||
tier2_matches = match_players_tier2_name(all_players, name_map, tier1_matches)
|
||||
|
||||
# Find unmatched players
|
||||
unmatched, unique_unmatched = find_unmatched_players(all_players, tier1_matches, tier2_matches)
|
||||
|
||||
# Generate report
|
||||
generate_matching_report(tier1_matches, tier2_matches, unmatched, unique_unmatched)
|
||||
|
||||
logger.info("Matching analysis complete!")
|
||||
logger.info(f"Results: {len(tier1_matches + tier2_matches):,} matched, {len(unmatched):,} unmatched")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@ -0,0 +1,105 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Debug the 508 emergency players to understand why they weren't matched"""
|
||||
|
||||
import json
|
||||
import csv
|
||||
from comprehensive_player_matching import normalize_name, create_name_variants
|
||||
|
||||
def main():
|
||||
# Load data
|
||||
all_players = []
|
||||
for season in range(1, 13):
|
||||
with open(f"/tmp/players_season_{season}.json", 'r') as f:
|
||||
season_data = json.load(f)
|
||||
all_players.extend(season_data)
|
||||
|
||||
with open('/tmp/sbaplayers.json', 'r') as f:
|
||||
sbaplayers = json.load(f)
|
||||
|
||||
# Read the assignment file to identify emergency players
|
||||
emergency_players = []
|
||||
with open('player_sbaplayer_assignments.csv', 'r') as f:
|
||||
reader = csv.DictReader(f)
|
||||
for row in reader:
|
||||
if row['assignment_source'] == 'emergency_new':
|
||||
emergency_players.append({
|
||||
'player_id': int(row['player_id']),
|
||||
'name': row['player_name'],
|
||||
'season': int(row['season']),
|
||||
'bbref_id': row['bbref_id']
|
||||
})
|
||||
|
||||
print(f"Found {len(emergency_players)} emergency assignments")
|
||||
|
||||
# Check some samples to see why they weren't matched
|
||||
sample_emergencies = emergency_players[:10]
|
||||
|
||||
# Create SbaPlayer lookup maps
|
||||
sbaplayer_name_map = {}
|
||||
sbaplayer_bbref_map = {}
|
||||
for sba in sbaplayers:
|
||||
full_name = f"{sba['first_name']} {sba['last_name']}"
|
||||
normalized = normalize_name(full_name)
|
||||
sbaplayer_name_map[normalized] = sba
|
||||
|
||||
if sba.get('key_bbref'):
|
||||
sbaplayer_bbref_map[sba['key_bbref']] = sba
|
||||
|
||||
print("\nAnalyzing sample emergency players:")
|
||||
print("-" * 50)
|
||||
|
||||
for emergency in sample_emergencies:
|
||||
print(f"\nPlayer: {emergency['name']} (Season {emergency['season']})")
|
||||
print(f" bbref_id: {emergency['bbref_id']}")
|
||||
|
||||
# Check bbref_id match
|
||||
if emergency['bbref_id'] and emergency['bbref_id'] in sbaplayer_bbref_map:
|
||||
sba = sbaplayer_bbref_map[emergency['bbref_id']]
|
||||
print(f" 🔍 BBREF MATCH FOUND: {sba['first_name']} {sba['last_name']} (ID {sba['id']})")
|
||||
print(f" ❌ This should have been Tier 1 matched!")
|
||||
elif emergency['bbref_id']:
|
||||
print(f" ❌ bbref_id '{emergency['bbref_id']}' not found in SbaPlayer records")
|
||||
|
||||
# Check name match
|
||||
normalized = normalize_name(emergency['name'])
|
||||
if normalized in sbaplayer_name_map:
|
||||
sba = sbaplayer_name_map[normalized]
|
||||
print(f" 🔍 NAME MATCH FOUND: {sba['first_name']} {sba['last_name']} (ID {sba['id']})")
|
||||
print(f" ❌ This should have been Tier 2 matched!")
|
||||
else:
|
||||
print(f" ❌ Normalized name '{normalized}' not found in SbaPlayer records")
|
||||
|
||||
# Check for similar names
|
||||
similar_names = [name for name in sbaplayer_name_map.keys()
|
||||
if emergency['name'].lower() in name.lower() or name.lower() in emergency['name'].lower()]
|
||||
if similar_names[:3]:
|
||||
print(f" Similar names: {similar_names[:3]}")
|
||||
|
||||
# Check season distribution of emergency players
|
||||
season_counts = {}
|
||||
for ep in emergency_players:
|
||||
season = ep['season']
|
||||
season_counts[season] = season_counts.get(season, 0) + 1
|
||||
|
||||
print(f"\nSeason distribution of emergency players:")
|
||||
for season in sorted(season_counts.keys()):
|
||||
print(f" Season {season}: {season_counts[season]} players")
|
||||
|
||||
# Check if these players exist in the original data but were somehow missed
|
||||
print(f"\nChecking if emergency players were in original comprehensive matching scope...")
|
||||
|
||||
emergency_names = set(ep['name'] for ep in emergency_players)
|
||||
original_unmatched_names = set()
|
||||
|
||||
# Try to load from matching report if it exists
|
||||
try:
|
||||
with open('matching_report.txt', 'r') as f:
|
||||
content = f.read()
|
||||
# This is rough parsing - just to get an idea
|
||||
if "SAMPLE UNMATCHED PLAYERS" in content:
|
||||
print("Found original unmatched players list in matching report")
|
||||
except FileNotFoundError:
|
||||
print("No matching report found")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@ -0,0 +1,46 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Debug script to understand why 508 players are unassigned"""
|
||||
|
||||
import json
|
||||
|
||||
def load_data():
|
||||
"""Load player data"""
|
||||
all_players = []
|
||||
for season in range(1, 13):
|
||||
with open(f"/tmp/players_season_{season}.json", 'r') as f:
|
||||
season_data = json.load(f)
|
||||
all_players.extend(season_data)
|
||||
|
||||
return all_players
|
||||
|
||||
def main():
|
||||
players = load_data()
|
||||
print(f"Total players loaded: {len(players)}")
|
||||
|
||||
# Check for players already assigned to SbaPlayer
|
||||
already_assigned = [p for p in players if p.get('sbaplayer_id')]
|
||||
print(f"Already assigned players: {len(already_assigned)}")
|
||||
|
||||
# Check season distribution
|
||||
season_counts = {}
|
||||
for p in players:
|
||||
season = p['season']
|
||||
season_counts[season] = season_counts.get(season, 0) + 1
|
||||
|
||||
print("\nSeason distribution:")
|
||||
for season in sorted(season_counts.keys()):
|
||||
print(f" Season {season}: {season_counts[season]} players")
|
||||
|
||||
# Show some sample unassigned players
|
||||
unassigned_names = set()
|
||||
for p in players:
|
||||
if not p.get('sbaplayer_id'):
|
||||
unassigned_names.add(p['name'])
|
||||
|
||||
print(f"\nTotal unique unassigned player names: {len(unassigned_names)}")
|
||||
print("Sample unassigned players:")
|
||||
for name in sorted(list(unassigned_names))[:20]:
|
||||
print(f" {name}")
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@ -0,0 +1,44 @@
|
||||
FINAL PLAYER-TO-SBAPLAYER ASSIGNMENT SUMMARY
|
||||
=======================================================
|
||||
|
||||
ASSIGNMENT BREAKDOWN:
|
||||
Tier 1 (bbref_id): 6,764 players
|
||||
Tier 2 (exact name): 5,367 players
|
||||
Manual existing: 30 players
|
||||
Manual new: 62 players
|
||||
Emergency new: 9 players (ERROR)
|
||||
TOTAL ASSIGNMENTS: 12,232 players
|
||||
|
||||
NEW SBAPLAYER RECORDS TO CREATE:
|
||||
Total new records: 16
|
||||
Albert Almora (temp ID 3234) - 5 players
|
||||
Diego Castillo (temp ID 3235) - 9 players
|
||||
Javy Guerra (temp ID 3236) - 5 players
|
||||
Luis Garcia (temp ID 3237) - 12 players
|
||||
Evan Phillips (temp ID 3238) - 9 players
|
||||
Francisco Mejia (temp ID 3239) - 10 players
|
||||
Mike Soroka (temp ID 3240) - 4 players
|
||||
Tom Eshelman (temp ID 3241) - 6 players
|
||||
Jose Garcia (temp ID 3242) - 2 players
|
||||
Logan Allen (temp ID 3243) - 7 players
|
||||
Luis H Garcia (temp ID 3244) - 8 players
|
||||
Tom Hatch (temp ID 3245) - 2 players
|
||||
Danny Coulombe (temp ID 3246) - 2 players
|
||||
JC Mejia (temp ID 3247) - 2 players
|
||||
Kody Funderburk (temp ID 3248) - 1 players
|
||||
Tyler Phillips (temp ID 3249) - 1 players
|
||||
|
||||
CAREER STAT TRACKING ENABLED FOR:
|
||||
12,161 players linked to existing SbaPlayers
|
||||
62 players will have career stats after new SbaPlayer creation
|
||||
TOTAL: 12,232 players will have career stat tracking
|
||||
|
||||
FILES GENERATED:
|
||||
- player_sbaplayer_assignments.csv (ready for API updates)
|
||||
- new_sbaplayers_to_insert.csv (new SbaPlayer records to create first)
|
||||
|
||||
NEXT STEPS:
|
||||
1. Review the assignment files for any issues
|
||||
2. Create new SbaPlayer records via API (new_sbaplayers_to_insert.csv)
|
||||
3. Update all player.sbaplayer_id fields via API (player_sbaplayer_assignments.csv)
|
||||
4. Verify career stat tracking works correctly
|
||||
@ -0,0 +1,447 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Generate final player-to-SbaPlayer assignments by combining:
|
||||
1. Automatic matches from comprehensive matching (Tier 1 & 2)
|
||||
2. Manual decisions from review CSV
|
||||
3. New SbaPlayer records for unmatched players
|
||||
"""
|
||||
|
||||
import json
|
||||
import csv
|
||||
import logging
|
||||
import re
|
||||
from dataclasses import dataclass, asdict
|
||||
from typing import Dict, List, Set, Optional, Tuple
|
||||
from collections import defaultdict
|
||||
|
||||
# Import functions from comprehensive matching
|
||||
from comprehensive_player_matching import (
|
||||
PlayerRecord, SbaPlayerRecord, MatchResult, normalize_name,
|
||||
create_name_variants, load_cached_data, create_matching_maps,
|
||||
match_players_tier1_bbref, match_players_tier2_name, find_unmatched_players
|
||||
)
|
||||
|
||||
# Set up logging
|
||||
logging.basicConfig(
|
||||
level=logging.INFO,
|
||||
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
|
||||
handlers=[
|
||||
logging.FileHandler('matching.log'),
|
||||
logging.StreamHandler()
|
||||
]
|
||||
)
|
||||
logger = logging.getLogger(f'{__name__}.generate_final_assignments')
|
||||
|
||||
@dataclass
|
||||
class ManualDecision:
|
||||
"""Manual decision from review CSV"""
|
||||
group_key: str
|
||||
player_name: str
|
||||
bbref_id: str
|
||||
seasons_appeared: str
|
||||
sample_player_ids: str
|
||||
potential_existing_sbaplayer_id: str
|
||||
potential_existing_sbaplayer_name: str
|
||||
potential_match_reason: str
|
||||
your_decision_sbaplayer_id: str
|
||||
your_decision_notes: str
|
||||
|
||||
@dataclass
|
||||
class FinalAssignment:
|
||||
"""Final player assignment result"""
|
||||
player_id: int
|
||||
player_name: str
|
||||
season: int
|
||||
bbref_id: Optional[str]
|
||||
assigned_sbaplayer_id: int
|
||||
assignment_source: str # 'tier1_bbref', 'tier2_name', 'manual_existing', 'manual_new'
|
||||
notes: str = ""
|
||||
|
||||
@dataclass
|
||||
class NewSbaPlayer:
|
||||
"""New SbaPlayer record to create"""
|
||||
temp_id: int # Temporary ID for assignments
|
||||
canonical_name: str
|
||||
key_bbref: Optional[str]
|
||||
first_name: str
|
||||
last_name: str
|
||||
name_variations: List[str]
|
||||
player_count: int
|
||||
notes: str
|
||||
|
||||
def parse_manual_decisions():
|
||||
"""Parse manual decisions from the review CSV"""
|
||||
decisions = []
|
||||
|
||||
logger.info("Parsing manual decisions from new_sbaplayers_for_review.csv...")
|
||||
|
||||
with open('new_sbaplayers_for_review.csv', 'r', encoding='utf-8') as f:
|
||||
# Handle the encoded format
|
||||
content = f.read()
|
||||
# Decode common HTML entities
|
||||
content = content.replace('+AF8-', '_')
|
||||
content = content.replace('+ACI-', '"')
|
||||
content = content.replace('+AC0-', '-')
|
||||
|
||||
# Parse as CSV
|
||||
lines = content.strip().split('\n')
|
||||
reader = csv.DictReader(lines)
|
||||
|
||||
for row in reader:
|
||||
if not row.get('group_key'): # Skip empty rows
|
||||
continue
|
||||
|
||||
decision = ManualDecision(
|
||||
group_key=row['group_key'],
|
||||
player_name=row['player_name'],
|
||||
bbref_id=row['bbref_id'],
|
||||
seasons_appeared=row['seasons_appeared'],
|
||||
sample_player_ids=row['sample_player_ids'],
|
||||
potential_existing_sbaplayer_id=row['potential_existing_sbaplayer_id'],
|
||||
potential_existing_sbaplayer_name=row['potential_existing_sbaplayer_name'],
|
||||
potential_match_reason=row['potential_match_reason'],
|
||||
your_decision_sbaplayer_id=row['your_decision_sbaplayer_id'],
|
||||
your_decision_notes=row['your_decision_notes']
|
||||
)
|
||||
decisions.append(decision)
|
||||
|
||||
logger.info(f"Parsed {len(decisions)} manual decisions")
|
||||
return decisions
|
||||
|
||||
def process_manual_decisions(decisions: List[ManualDecision], sbaplayers: List[SbaPlayerRecord]) -> Tuple[Dict, Dict]:
|
||||
"""Process manual decisions into existing matches and new players needed"""
|
||||
|
||||
# Create SbaPlayer lookup
|
||||
sbaplayer_map = {sp.id: sp for sp in sbaplayers}
|
||||
|
||||
# Process decisions
|
||||
existing_matches = {} # player_name -> sbaplayer_id
|
||||
new_player_groups = {} # canonical_name -> [player_names]
|
||||
special_cases = {} # Handle consolidations and corrupted data
|
||||
|
||||
for decision in decisions:
|
||||
player_name = decision.player_name
|
||||
|
||||
if decision.your_decision_sbaplayer_id:
|
||||
# User chose an existing SbaPlayer
|
||||
try:
|
||||
sbaplayer_id = int(decision.your_decision_sbaplayer_id)
|
||||
if sbaplayer_id in sbaplayer_map:
|
||||
existing_matches[player_name] = sbaplayer_id
|
||||
logger.info(f"Manual match: '{player_name}' -> SbaPlayer ID {sbaplayer_id} ({sbaplayer_map[sbaplayer_id].full_name})")
|
||||
else:
|
||||
logger.warning(f"Invalid SbaPlayer ID {sbaplayer_id} for {player_name}")
|
||||
except ValueError:
|
||||
logger.warning(f"Invalid SbaPlayer ID format: {decision.your_decision_sbaplayer_id}")
|
||||
else:
|
||||
# User decided this needs a new SbaPlayer record
|
||||
canonical_name = player_name # Default to same name
|
||||
|
||||
# Check for special consolidation cases
|
||||
if "Three-way match" in decision.your_decision_notes:
|
||||
if "use name Tom Eshelman" in decision.your_decision_notes:
|
||||
canonical_name = "Tom Eshelman"
|
||||
elif "Two-way match" in decision.your_decision_notes:
|
||||
if "join with bbref_id mejiafr01" in decision.your_decision_notes:
|
||||
# This Francisco Mejia (HALP) should consolidate with the legitimate one
|
||||
canonical_name = "Francisco Mejia" # Will be consolidated later
|
||||
special_cases[player_name] = "consolidate_with_mejiafr01"
|
||||
|
||||
# Group players by canonical name
|
||||
if canonical_name not in new_player_groups:
|
||||
new_player_groups[canonical_name] = []
|
||||
new_player_groups[canonical_name].append(player_name)
|
||||
|
||||
logger.info(f"Manual decisions processed:")
|
||||
logger.info(f" Existing matches: {len(existing_matches)}")
|
||||
logger.info(f" New player groups: {len(new_player_groups)}")
|
||||
|
||||
return existing_matches, new_player_groups, special_cases
|
||||
|
||||
def create_new_sbaplayer_records(new_player_groups: Dict[str, List[str]], all_players: List[PlayerRecord],
|
||||
sbaplayers: List[SbaPlayerRecord]) -> List[NewSbaPlayer]:
|
||||
"""Create new SbaPlayer records for unmatched player groups"""
|
||||
|
||||
new_sbaplayers = []
|
||||
next_id = max([sp.id for sp in sbaplayers]) + 1000 # Start from high ID to avoid conflicts
|
||||
|
||||
for canonical_name, player_names in new_player_groups.items():
|
||||
# Find all player records for this group
|
||||
all_variants = set(player_names)
|
||||
group_players = [p for p in all_players if p.name in all_variants]
|
||||
|
||||
if not group_players:
|
||||
logger.warning(f"No player records found for group: {canonical_name}")
|
||||
continue
|
||||
|
||||
# Get bbref_id from any player that has one
|
||||
bbref_id = None
|
||||
for player in group_players:
|
||||
if player.bbref_id and player.bbref_id != "HALP": # Skip corrupted data
|
||||
bbref_id = player.bbref_id
|
||||
break
|
||||
|
||||
# Parse canonical name for first/last
|
||||
name_parts = canonical_name.split()
|
||||
if len(name_parts) >= 2:
|
||||
first_name = name_parts[0]
|
||||
last_name = ' '.join(name_parts[1:])
|
||||
else:
|
||||
first_name = canonical_name
|
||||
last_name = ""
|
||||
|
||||
# Create new SbaPlayer record
|
||||
new_sba = NewSbaPlayer(
|
||||
temp_id=next_id,
|
||||
canonical_name=canonical_name,
|
||||
key_bbref=bbref_id,
|
||||
first_name=first_name,
|
||||
last_name=last_name,
|
||||
name_variations=player_names,
|
||||
player_count=len(group_players),
|
||||
notes=f"Created from manual review. Variations: {', '.join(sorted(set(player_names)))}"
|
||||
)
|
||||
|
||||
new_sbaplayers.append(new_sba)
|
||||
logger.info(f"New SbaPlayer: '{canonical_name}' (temp ID {next_id}) for {len(group_players)} player records")
|
||||
next_id += 1
|
||||
|
||||
return new_sbaplayers
|
||||
|
||||
def generate_all_assignments(all_players: List[PlayerRecord], sbaplayers: List[SbaPlayerRecord],
|
||||
tier1_matches: List[MatchResult], tier2_matches: List[MatchResult],
|
||||
existing_matches: Dict[str, int], new_sbaplayers: List[NewSbaPlayer]) -> List[FinalAssignment]:
|
||||
"""Generate complete assignments for all 12,232+ player records"""
|
||||
|
||||
assignments = []
|
||||
|
||||
# Create lookup maps
|
||||
sbaplayer_map = {sp.id: sp for sp in sbaplayers}
|
||||
new_sbaplayer_map = {} # name -> temp_id
|
||||
for new_sba in new_sbaplayers:
|
||||
for name_variant in new_sba.name_variations:
|
||||
new_sbaplayer_map[name_variant] = new_sba.temp_id
|
||||
|
||||
# Track assigned player IDs
|
||||
assigned_player_ids = set()
|
||||
|
||||
# 1. Process Tier 1 matches (bbref_id)
|
||||
logger.info("Processing Tier 1 (bbref_id) assignments...")
|
||||
for match in tier1_matches:
|
||||
# Find the player record to get season info
|
||||
player_record = next((p for p in all_players if p.id == match.player_id), None)
|
||||
season = player_record.season if player_record else 0
|
||||
|
||||
assignment = FinalAssignment(
|
||||
player_id=match.player_id,
|
||||
player_name=match.player_name,
|
||||
season=season,
|
||||
bbref_id=match.player_bbref_id,
|
||||
assigned_sbaplayer_id=match.sbaplayer_id,
|
||||
assignment_source="tier1_bbref",
|
||||
notes=f"Automatic match via bbref_id to {match.sbaplayer_name}"
|
||||
)
|
||||
assignments.append(assignment)
|
||||
assigned_player_ids.add(match.player_id)
|
||||
|
||||
# 2. Process Tier 2 matches (exact name)
|
||||
logger.info("Processing Tier 2 (exact name) assignments...")
|
||||
for match in tier2_matches:
|
||||
# Find the player record to get season info
|
||||
player_record = next((p for p in all_players if p.id == match.player_id), None)
|
||||
season = player_record.season if player_record else 0
|
||||
|
||||
assignment = FinalAssignment(
|
||||
player_id=match.player_id,
|
||||
player_name=match.player_name,
|
||||
season=season,
|
||||
bbref_id=match.player_bbref_id,
|
||||
assigned_sbaplayer_id=match.sbaplayer_id,
|
||||
assignment_source="tier2_name",
|
||||
notes=f"Automatic match via exact name to {match.sbaplayer_name}"
|
||||
)
|
||||
assignments.append(assignment)
|
||||
assigned_player_ids.add(match.player_id)
|
||||
|
||||
# 3. Process manual existing matches
|
||||
logger.info("Processing manual existing matches...")
|
||||
for player_name, sbaplayer_id in existing_matches.items():
|
||||
matching_players = [p for p in all_players if p.name == player_name and p.id not in assigned_player_ids]
|
||||
sba_name = sbaplayer_map[sbaplayer_id].full_name if sbaplayer_id in sbaplayer_map else "Unknown"
|
||||
|
||||
for player in matching_players:
|
||||
assignment = FinalAssignment(
|
||||
player_id=player.id,
|
||||
player_name=player.name,
|
||||
season=player.season,
|
||||
bbref_id=player.bbref_id,
|
||||
assigned_sbaplayer_id=sbaplayer_id,
|
||||
assignment_source="manual_existing",
|
||||
notes=f"Manual match to existing SbaPlayer: {sba_name}"
|
||||
)
|
||||
assignments.append(assignment)
|
||||
assigned_player_ids.add(player.id)
|
||||
|
||||
# 4. Process new SbaPlayer assignments
|
||||
logger.info("Processing new SbaPlayer assignments...")
|
||||
for new_sba in new_sbaplayers:
|
||||
for name_variant in new_sba.name_variations:
|
||||
matching_players = [p for p in all_players if p.name == name_variant and p.id not in assigned_player_ids]
|
||||
|
||||
for player in matching_players:
|
||||
assignment = FinalAssignment(
|
||||
player_id=player.id,
|
||||
player_name=player.name,
|
||||
season=player.season,
|
||||
bbref_id=player.bbref_id,
|
||||
assigned_sbaplayer_id=new_sba.temp_id,
|
||||
assignment_source="manual_new",
|
||||
notes=f"Manual assignment to new SbaPlayer: {new_sba.canonical_name}"
|
||||
)
|
||||
assignments.append(assignment)
|
||||
assigned_player_ids.add(player.id)
|
||||
|
||||
# 5. Check for any remaining unassigned players
|
||||
unassigned_players = [p for p in all_players if p.id not in assigned_player_ids]
|
||||
if unassigned_players:
|
||||
logger.warning(f"Found {len(unassigned_players)} unassigned players! This shouldn't happen.")
|
||||
for player in unassigned_players[:5]: # Show first 5
|
||||
logger.warning(f" Unassigned: {player.name} (ID: {player.id}, Season: {player.season})")
|
||||
|
||||
logger.info(f"Generated {len(assignments)} total player assignments")
|
||||
return assignments
|
||||
|
||||
def save_assignment_files(assignments: List[FinalAssignment], new_sbaplayers: List[NewSbaPlayer]):
|
||||
"""Save the final assignment files"""
|
||||
|
||||
# Save player assignments
|
||||
logger.info("Saving player_sbaplayer_assignments.csv...")
|
||||
with open('player_sbaplayer_assignments.csv', 'w', newline='') as f:
|
||||
fieldnames = ['player_id', 'player_name', 'season', 'bbref_id', 'assigned_sbaplayer_id', 'assignment_source', 'notes']
|
||||
writer = csv.DictWriter(f, fieldnames=fieldnames)
|
||||
writer.writeheader()
|
||||
|
||||
for assignment in assignments:
|
||||
writer.writerow(asdict(assignment))
|
||||
|
||||
logger.info(f"Saved {len(assignments)} player assignments")
|
||||
|
||||
# Save new SbaPlayers to create
|
||||
logger.info("Saving new_sbaplayers_to_insert.csv...")
|
||||
with open('new_sbaplayers_to_insert.csv', 'w', newline='') as f:
|
||||
fieldnames = ['temp_id', 'canonical_name', 'first_name', 'last_name', 'key_bbref', 'name_variations', 'player_count', 'notes']
|
||||
writer = csv.DictWriter(f, fieldnames=fieldnames)
|
||||
writer.writeheader()
|
||||
|
||||
for new_sba in new_sbaplayers:
|
||||
row = asdict(new_sba)
|
||||
row['name_variations'] = ', '.join(row['name_variations']) # Convert list to string
|
||||
writer.writerow(row)
|
||||
|
||||
logger.info(f"Saved {len(new_sbaplayers)} new SbaPlayer records")
|
||||
|
||||
def generate_summary_report(assignments: List[FinalAssignment], new_sbaplayers: List[NewSbaPlayer]):
|
||||
"""Generate final summary report"""
|
||||
|
||||
# Count assignments by source
|
||||
source_counts = defaultdict(int)
|
||||
for assignment in assignments:
|
||||
source_counts[assignment.assignment_source] += 1
|
||||
|
||||
# Count assignments by SbaPlayer ID
|
||||
sbaplayer_counts = defaultdict(int)
|
||||
for assignment in assignments:
|
||||
sbaplayer_counts[assignment.assigned_sbaplayer_id] += 1
|
||||
|
||||
logger.info("Generating final summary report...")
|
||||
with open('final_assignment_summary.txt', 'w') as f:
|
||||
f.write("FINAL PLAYER-TO-SBAPLAYER ASSIGNMENT SUMMARY\n")
|
||||
f.write("=" * 55 + "\n\n")
|
||||
|
||||
f.write("ASSIGNMENT BREAKDOWN:\n")
|
||||
f.write(f" Tier 1 (bbref_id): {source_counts['tier1_bbref']:,} players\n")
|
||||
f.write(f" Tier 2 (exact name): {source_counts['tier2_name']:,} players\n")
|
||||
f.write(f" Manual existing: {source_counts['manual_existing']:,} players\n")
|
||||
f.write(f" Manual new: {source_counts['manual_new']:,} players\n")
|
||||
f.write(f" TOTAL ASSIGNMENTS: {len(assignments):,} players\n\n")
|
||||
|
||||
f.write("NEW SBAPLAYER RECORDS TO CREATE:\n")
|
||||
f.write(f" Total new records: {len(new_sbaplayers)}\n")
|
||||
for new_sba in new_sbaplayers:
|
||||
f.write(f" {new_sba.canonical_name} (temp ID {new_sba.temp_id}) - {new_sba.player_count} players\n")
|
||||
f.write("\n")
|
||||
|
||||
f.write("CAREER STAT TRACKING ENABLED FOR:\n")
|
||||
existing_sbaplayers = len([a for a in assignments if a.assignment_source in ['tier1_bbref', 'tier2_name', 'manual_existing']])
|
||||
f.write(f" {existing_sbaplayers:,} players linked to existing SbaPlayers\n")
|
||||
f.write(f" {source_counts['manual_new']:,} players will have career stats after new SbaPlayer creation\n")
|
||||
f.write(f" TOTAL: {len(assignments):,} players will have career stat tracking\n\n")
|
||||
|
||||
f.write("FILES GENERATED:\n")
|
||||
f.write(" - player_sbaplayer_assignments.csv (ready for API updates)\n")
|
||||
f.write(" - new_sbaplayers_to_insert.csv (new SbaPlayer records to create first)\n\n")
|
||||
|
||||
f.write("NEXT STEPS:\n")
|
||||
f.write("1. Review the assignment files for any issues\n")
|
||||
f.write("2. Create new SbaPlayer records via API (new_sbaplayers_to_insert.csv)\n")
|
||||
f.write("3. Update all player.sbaplayer_id fields via API (player_sbaplayer_assignments.csv)\n")
|
||||
f.write("4. Verify career stat tracking works correctly\n")
|
||||
|
||||
def main():
|
||||
"""Main processing function"""
|
||||
logger.info("Starting final assignment generation...")
|
||||
|
||||
try:
|
||||
# Load cached data
|
||||
all_players, sbaplayers = load_cached_data()
|
||||
|
||||
# Run comprehensive matching for automatic matches
|
||||
logger.info("Running comprehensive matching for Tier 1 & 2...")
|
||||
bbref_map, name_map = create_matching_maps(sbaplayers)
|
||||
tier1_matches = match_players_tier1_bbref(all_players, bbref_map)
|
||||
tier2_matches = match_players_tier2_name(all_players, name_map, tier1_matches)
|
||||
|
||||
# Parse manual decisions
|
||||
decisions = parse_manual_decisions()
|
||||
existing_matches, new_player_groups, special_cases = process_manual_decisions(decisions, sbaplayers)
|
||||
|
||||
# Create new SbaPlayer records
|
||||
new_sbaplayers = create_new_sbaplayer_records(new_player_groups, all_players, sbaplayers)
|
||||
|
||||
# Generate complete assignments
|
||||
assignments = generate_all_assignments(
|
||||
all_players, sbaplayers, tier1_matches, tier2_matches,
|
||||
existing_matches, new_sbaplayers
|
||||
)
|
||||
|
||||
# Save files
|
||||
save_assignment_files(assignments, new_sbaplayers)
|
||||
|
||||
# Generate summary
|
||||
generate_summary_report(assignments, new_sbaplayers)
|
||||
|
||||
logger.info("✅ Final assignment generation completed successfully!")
|
||||
|
||||
# Print summary
|
||||
source_counts = defaultdict(int)
|
||||
for assignment in assignments:
|
||||
source_counts[assignment.assignment_source] += 1
|
||||
|
||||
print(f"\n🎉 FINAL RESULTS:")
|
||||
print(f" 📊 {len(assignments):,} total player assignments generated")
|
||||
print(f" 🔗 {source_counts['tier1_bbref']:,} Tier 1 (bbref_id) matches")
|
||||
print(f" 📝 {source_counts['tier2_name']:,} Tier 2 (exact name) matches")
|
||||
print(f" 👤 {source_counts['manual_existing']:,} Manual existing matches")
|
||||
print(f" ➕ {source_counts['manual_new']:,} Manual new SbaPlayer assignments")
|
||||
print(f" 📋 {len(new_sbaplayers)} new SbaPlayer records to create")
|
||||
print(f"\n📁 Files generated:")
|
||||
print(f" - player_sbaplayer_assignments.csv")
|
||||
print(f" - new_sbaplayers_to_insert.csv")
|
||||
print(f" - final_assignment_summary.txt")
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Error generating final assignments: {e}")
|
||||
raise
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@ -0,0 +1,492 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Generate final player-to-SbaPlayer assignments by combining:
|
||||
1. Automatic matches from comprehensive matching (Tier 1 & 2)
|
||||
2. Manual decisions from review CSV
|
||||
3. New SbaPlayer records for unmatched players
|
||||
|
||||
FIXED VERSION: Properly handles all 12,232 individual player records
|
||||
"""
|
||||
|
||||
import json
|
||||
import csv
|
||||
import logging
|
||||
import re
|
||||
from dataclasses import dataclass, asdict
|
||||
from typing import Dict, List, Set, Optional, Tuple
|
||||
from collections import defaultdict
|
||||
|
||||
# Import functions from comprehensive matching
|
||||
from comprehensive_player_matching import (
|
||||
PlayerRecord, SbaPlayerRecord, normalize_name,
|
||||
create_name_variants, load_cached_data, create_matching_maps
|
||||
)
|
||||
|
||||
# Set up logging
|
||||
logging.basicConfig(
|
||||
level=logging.INFO,
|
||||
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
|
||||
handlers=[
|
||||
logging.FileHandler('matching.log'),
|
||||
logging.StreamHandler()
|
||||
]
|
||||
)
|
||||
logger = logging.getLogger(f'{__name__}.generate_final_assignments_v2')
|
||||
|
||||
@dataclass
|
||||
class ManualDecision:
|
||||
"""Manual decision from review CSV"""
|
||||
group_key: str
|
||||
player_name: str
|
||||
bbref_id: str
|
||||
seasons_appeared: str
|
||||
sample_player_ids: str
|
||||
potential_existing_sbaplayer_id: str
|
||||
potential_existing_sbaplayer_name: str
|
||||
potential_match_reason: str
|
||||
your_decision_sbaplayer_id: str
|
||||
your_decision_notes: str
|
||||
|
||||
@dataclass
|
||||
class FinalAssignment:
|
||||
"""Final player assignment result"""
|
||||
player_id: int
|
||||
player_name: str
|
||||
season: int
|
||||
bbref_id: Optional[str]
|
||||
assigned_sbaplayer_id: int
|
||||
assignment_source: str # 'tier1_bbref', 'tier2_name', 'manual_existing', 'manual_new'
|
||||
notes: str = ""
|
||||
|
||||
@dataclass
|
||||
class NewSbaPlayer:
|
||||
"""New SbaPlayer record to create"""
|
||||
temp_id: int # Temporary ID for assignments
|
||||
canonical_name: str
|
||||
key_bbref: Optional[str]
|
||||
first_name: str
|
||||
last_name: str
|
||||
name_variations: List[str]
|
||||
player_count: int
|
||||
notes: str
|
||||
|
||||
def parse_manual_decisions():
|
||||
"""Parse manual decisions from the review CSV"""
|
||||
decisions = []
|
||||
|
||||
logger.info("Parsing manual decisions from new_sbaplayers_for_review.csv...")
|
||||
|
||||
with open('new_sbaplayers_for_review.csv', 'r', encoding='utf-8') as f:
|
||||
# Handle the encoded format
|
||||
content = f.read()
|
||||
# Decode common HTML entities
|
||||
content = content.replace('+AF8-', '_')
|
||||
content = content.replace('+ACI-', '"')
|
||||
content = content.replace('+AC0-', '-')
|
||||
|
||||
# Parse as CSV
|
||||
lines = content.strip().split('\n')
|
||||
reader = csv.DictReader(lines)
|
||||
|
||||
for row in reader:
|
||||
if not row.get('group_key'): # Skip empty rows
|
||||
continue
|
||||
|
||||
decision = ManualDecision(
|
||||
group_key=row['group_key'],
|
||||
player_name=row['player_name'],
|
||||
bbref_id=row['bbref_id'],
|
||||
seasons_appeared=row['seasons_appeared'],
|
||||
sample_player_ids=row['sample_player_ids'],
|
||||
potential_existing_sbaplayer_id=row['potential_existing_sbaplayer_id'],
|
||||
potential_existing_sbaplayer_name=row['potential_existing_sbaplayer_name'],
|
||||
potential_match_reason=row['potential_match_reason'],
|
||||
your_decision_sbaplayer_id=row['your_decision_sbaplayer_id'],
|
||||
your_decision_notes=row['your_decision_notes']
|
||||
)
|
||||
decisions.append(decision)
|
||||
|
||||
logger.info(f"Parsed {len(decisions)} manual decisions")
|
||||
return decisions
|
||||
|
||||
def run_comprehensive_matching(all_players, sbaplayers):
|
||||
"""Run the comprehensive matching logic to get automatic assignments"""
|
||||
logger.info("Running comprehensive matching logic...")
|
||||
|
||||
# Create lookup maps
|
||||
bbref_map, name_map = create_matching_maps(sbaplayers)
|
||||
|
||||
# Track all assignments
|
||||
assignments = {} # player_id -> (sbaplayer_id, source, notes)
|
||||
|
||||
# TIER 1: bbref_id matching
|
||||
logger.info("Tier 1: Matching by bbref_id...")
|
||||
tier1_count = 0
|
||||
for player in all_players:
|
||||
# Treat "HALP" as corrupted data (equivalent to no bbref_id)
|
||||
valid_bbref_id = player.bbref_id if player.bbref_id and player.bbref_id != "HALP" else None
|
||||
if valid_bbref_id and valid_bbref_id in bbref_map:
|
||||
sba = bbref_map[valid_bbref_id]
|
||||
assignments[player.id] = (
|
||||
sba.id,
|
||||
"tier1_bbref",
|
||||
f"Automatic match via bbref_id to {sba.full_name}"
|
||||
)
|
||||
tier1_count += 1
|
||||
|
||||
logger.info(f"Tier 1 matches: {tier1_count} player records")
|
||||
|
||||
# TIER 2: exact name matching (for players without valid bbref_id that weren't matched in tier 1)
|
||||
logger.info("Tier 2: Matching by exact name...")
|
||||
tier2_count = 0
|
||||
for player in all_players:
|
||||
# Treat "HALP" as corrupted data (equivalent to no bbref_id)
|
||||
valid_bbref_id = player.bbref_id if player.bbref_id and player.bbref_id != "HALP" else None
|
||||
if player.id not in assignments and not valid_bbref_id: # Not matched in tier 1, no valid bbref_id
|
||||
normalized_name = normalize_name(player.name)
|
||||
if normalized_name in name_map:
|
||||
potential_matches = name_map[normalized_name]
|
||||
if len(potential_matches) == 1: # Unambiguous match
|
||||
sba = potential_matches[0]
|
||||
assignments[player.id] = (
|
||||
sba.id,
|
||||
"tier2_name",
|
||||
f"Automatic match via exact name to {sba.full_name}"
|
||||
)
|
||||
tier2_count += 1
|
||||
|
||||
logger.info(f"Tier 2 matches: {tier2_count} player records")
|
||||
logger.info(f"Total automatic matches: {tier1_count + tier2_count}")
|
||||
|
||||
return assignments
|
||||
|
||||
def process_manual_decisions(decisions: List[ManualDecision], sbaplayers: List[SbaPlayerRecord]) -> Tuple[Dict, Dict]:
|
||||
"""Process manual decisions into existing matches and new players needed"""
|
||||
|
||||
# Create SbaPlayer lookup
|
||||
sbaplayer_map = {sp.id: sp for sp in sbaplayers}
|
||||
|
||||
# Process decisions
|
||||
existing_matches = {} # player_name -> sbaplayer_id
|
||||
new_player_groups = {} # canonical_name -> [player_names]
|
||||
special_cases = {} # Handle consolidations and corrupted data
|
||||
|
||||
for decision in decisions:
|
||||
player_name = decision.player_name
|
||||
|
||||
if decision.your_decision_sbaplayer_id:
|
||||
# User chose an existing SbaPlayer
|
||||
try:
|
||||
sbaplayer_id = int(decision.your_decision_sbaplayer_id)
|
||||
if sbaplayer_id in sbaplayer_map:
|
||||
existing_matches[player_name] = sbaplayer_id
|
||||
logger.info(f"Manual match: '{player_name}' -> SbaPlayer ID {sbaplayer_id} ({sbaplayer_map[sbaplayer_id].full_name})")
|
||||
else:
|
||||
logger.warning(f"Invalid SbaPlayer ID {sbaplayer_id} for {player_name}")
|
||||
except ValueError:
|
||||
logger.warning(f"Invalid SbaPlayer ID format: {decision.your_decision_sbaplayer_id}")
|
||||
else:
|
||||
# User decided this needs a new SbaPlayer record
|
||||
canonical_name = player_name # Default to same name
|
||||
|
||||
# Check for special consolidation cases
|
||||
if "Three-way match" in decision.your_decision_notes:
|
||||
if "use name Tom Eshelman" in decision.your_decision_notes:
|
||||
canonical_name = "Tom Eshelman"
|
||||
elif "Two-way match" in decision.your_decision_notes:
|
||||
if "join with bbref_id mejiafr01" in decision.your_decision_notes:
|
||||
# This Francisco Mejia (HALP) should consolidate with the legitimate one
|
||||
canonical_name = "Francisco Mejia" # Will be consolidated later
|
||||
special_cases[player_name] = "consolidate_with_mejiafr01"
|
||||
|
||||
# Group players by canonical name
|
||||
if canonical_name not in new_player_groups:
|
||||
new_player_groups[canonical_name] = []
|
||||
new_player_groups[canonical_name].append(player_name)
|
||||
|
||||
logger.info(f"Manual decisions processed:")
|
||||
logger.info(f" Existing matches: {len(existing_matches)}")
|
||||
logger.info(f" New player groups: {len(new_player_groups)}")
|
||||
|
||||
return existing_matches, new_player_groups, special_cases
|
||||
|
||||
def create_new_sbaplayer_records(new_player_groups: Dict[str, List[str]], all_players: List[PlayerRecord],
|
||||
sbaplayers: List[SbaPlayerRecord]) -> List[NewSbaPlayer]:
|
||||
"""Create new SbaPlayer records for unmatched player groups"""
|
||||
|
||||
new_sbaplayers = []
|
||||
next_id = max([sp.id for sp in sbaplayers]) + 1000 # Start from high ID to avoid conflicts
|
||||
|
||||
for canonical_name, player_names in new_player_groups.items():
|
||||
# Find all player records for this group
|
||||
all_variants = set(player_names)
|
||||
group_players = [p for p in all_players if p.name in all_variants]
|
||||
|
||||
if not group_players:
|
||||
logger.warning(f"No player records found for group: {canonical_name}")
|
||||
continue
|
||||
|
||||
# Get bbref_id from any player that has one
|
||||
bbref_id = None
|
||||
for player in group_players:
|
||||
if player.bbref_id and player.bbref_id != "HALP": # Skip corrupted data
|
||||
bbref_id = player.bbref_id
|
||||
break
|
||||
|
||||
# Parse canonical name for first/last
|
||||
name_parts = canonical_name.split()
|
||||
if len(name_parts) >= 2:
|
||||
first_name = name_parts[0]
|
||||
last_name = ' '.join(name_parts[1:])
|
||||
else:
|
||||
first_name = canonical_name
|
||||
last_name = ""
|
||||
|
||||
# Create new SbaPlayer record
|
||||
new_sba = NewSbaPlayer(
|
||||
temp_id=next_id,
|
||||
canonical_name=canonical_name,
|
||||
key_bbref=bbref_id,
|
||||
first_name=first_name,
|
||||
last_name=last_name,
|
||||
name_variations=player_names,
|
||||
player_count=len(group_players),
|
||||
notes=f"Created from manual review. Variations: {', '.join(sorted(set(player_names)))}"
|
||||
)
|
||||
|
||||
new_sbaplayers.append(new_sba)
|
||||
logger.info(f"New SbaPlayer: '{canonical_name}' (temp ID {next_id}) for {len(group_players)} player records")
|
||||
next_id += 1
|
||||
|
||||
return new_sbaplayers
|
||||
|
||||
def generate_all_assignments(all_players: List[PlayerRecord], sbaplayers: List[SbaPlayerRecord],
|
||||
auto_assignments: Dict, existing_matches: Dict[str, int],
|
||||
new_sbaplayers: List[NewSbaPlayer]) -> List[FinalAssignment]:
|
||||
"""Generate complete assignments for ALL 12,232 player records"""
|
||||
|
||||
assignments = []
|
||||
|
||||
# Create lookup maps
|
||||
sbaplayer_map = {sp.id: sp for sp in sbaplayers}
|
||||
new_sbaplayer_map = {} # name -> temp_id
|
||||
for new_sba in new_sbaplayers:
|
||||
for name_variant in new_sba.name_variations:
|
||||
new_sbaplayer_map[name_variant] = new_sba.temp_id
|
||||
|
||||
# Track processed player IDs
|
||||
processed_player_ids = set()
|
||||
|
||||
# Process every single player record
|
||||
for player in all_players:
|
||||
assignment = None
|
||||
|
||||
# 1. Check if already assigned via automatic matching
|
||||
if player.id in auto_assignments:
|
||||
sbaplayer_id, source, notes = auto_assignments[player.id]
|
||||
assignment = FinalAssignment(
|
||||
player_id=player.id,
|
||||
player_name=player.name,
|
||||
season=player.season,
|
||||
bbref_id=player.bbref_id,
|
||||
assigned_sbaplayer_id=sbaplayer_id,
|
||||
assignment_source=source,
|
||||
notes=notes
|
||||
)
|
||||
|
||||
# 2. Check if manually assigned to existing SbaPlayer
|
||||
elif player.name in existing_matches:
|
||||
sbaplayer_id = existing_matches[player.name]
|
||||
sba_name = sbaplayer_map[sbaplayer_id].full_name if sbaplayer_id in sbaplayer_map else "Unknown"
|
||||
assignment = FinalAssignment(
|
||||
player_id=player.id,
|
||||
player_name=player.name,
|
||||
season=player.season,
|
||||
bbref_id=player.bbref_id,
|
||||
assigned_sbaplayer_id=sbaplayer_id,
|
||||
assignment_source="manual_existing",
|
||||
notes=f"Manual match to existing SbaPlayer: {sba_name}"
|
||||
)
|
||||
|
||||
# 3. Check if assigned to new SbaPlayer
|
||||
elif player.name in new_sbaplayer_map:
|
||||
temp_id = new_sbaplayer_map[player.name]
|
||||
new_sba = next((ns for ns in new_sbaplayers if ns.temp_id == temp_id), None)
|
||||
canonical_name = new_sba.canonical_name if new_sba else player.name
|
||||
assignment = FinalAssignment(
|
||||
player_id=player.id,
|
||||
player_name=player.name,
|
||||
season=player.season,
|
||||
bbref_id=player.bbref_id,
|
||||
assigned_sbaplayer_id=temp_id,
|
||||
assignment_source="manual_new",
|
||||
notes=f"Manual assignment to new SbaPlayer: {canonical_name}"
|
||||
)
|
||||
|
||||
# 4. This shouldn't happen - every player should be assigned by now
|
||||
else:
|
||||
logger.error(f"UNASSIGNED PLAYER: {player.name} (ID: {player.id}, Season: {player.season})")
|
||||
# Create emergency new SbaPlayer for this orphaned player
|
||||
emergency_id = 9999000 + player.id # Use a very high ID to avoid conflicts
|
||||
assignment = FinalAssignment(
|
||||
player_id=player.id,
|
||||
player_name=player.name,
|
||||
season=player.season,
|
||||
bbref_id=player.bbref_id,
|
||||
assigned_sbaplayer_id=emergency_id,
|
||||
assignment_source="emergency_new",
|
||||
notes=f"EMERGENCY: Unassigned player, needs new SbaPlayer record"
|
||||
)
|
||||
|
||||
if assignment:
|
||||
assignments.append(assignment)
|
||||
processed_player_ids.add(player.id)
|
||||
|
||||
logger.info(f"Generated {len(assignments)} total player assignments")
|
||||
|
||||
# Verify we got everyone
|
||||
if len(assignments) != len(all_players):
|
||||
logger.error(f"MISMATCH: Expected {len(all_players)} assignments, got {len(assignments)}")
|
||||
else:
|
||||
logger.info("✅ All players successfully assigned!")
|
||||
|
||||
return assignments
|
||||
|
||||
def save_assignment_files(assignments: List[FinalAssignment], new_sbaplayers: List[NewSbaPlayer]):
|
||||
"""Save the final assignment files"""
|
||||
|
||||
# Save player assignments
|
||||
logger.info("Saving player_sbaplayer_assignments.csv...")
|
||||
with open('player_sbaplayer_assignments.csv', 'w', newline='') as f:
|
||||
fieldnames = ['player_id', 'player_name', 'season', 'bbref_id', 'assigned_sbaplayer_id', 'assignment_source', 'notes']
|
||||
writer = csv.DictWriter(f, fieldnames=fieldnames)
|
||||
writer.writeheader()
|
||||
|
||||
for assignment in assignments:
|
||||
writer.writerow(asdict(assignment))
|
||||
|
||||
logger.info(f"Saved {len(assignments)} player assignments")
|
||||
|
||||
# Save new SbaPlayers to create
|
||||
logger.info("Saving new_sbaplayers_to_insert.csv...")
|
||||
with open('new_sbaplayers_to_insert.csv', 'w', newline='') as f:
|
||||
fieldnames = ['temp_id', 'canonical_name', 'first_name', 'last_name', 'key_bbref', 'name_variations', 'player_count', 'notes']
|
||||
writer = csv.DictWriter(f, fieldnames=fieldnames)
|
||||
writer.writeheader()
|
||||
|
||||
for new_sba in new_sbaplayers:
|
||||
row = asdict(new_sba)
|
||||
row['name_variations'] = ', '.join(row['name_variations']) # Convert list to string
|
||||
writer.writerow(row)
|
||||
|
||||
logger.info(f"Saved {len(new_sbaplayers)} new SbaPlayer records")
|
||||
|
||||
def generate_summary_report(assignments: List[FinalAssignment], new_sbaplayers: List[NewSbaPlayer]):
|
||||
"""Generate final summary report"""
|
||||
|
||||
# Count assignments by source
|
||||
source_counts = defaultdict(int)
|
||||
for assignment in assignments:
|
||||
source_counts[assignment.assignment_source] += 1
|
||||
|
||||
logger.info("Generating final summary report...")
|
||||
with open('final_assignment_summary.txt', 'w') as f:
|
||||
f.write("FINAL PLAYER-TO-SBAPLAYER ASSIGNMENT SUMMARY\n")
|
||||
f.write("=" * 55 + "\n\n")
|
||||
|
||||
f.write("ASSIGNMENT BREAKDOWN:\n")
|
||||
f.write(f" Tier 1 (bbref_id): {source_counts['tier1_bbref']:,} players\n")
|
||||
f.write(f" Tier 2 (exact name): {source_counts['tier2_name']:,} players\n")
|
||||
f.write(f" Manual existing: {source_counts['manual_existing']:,} players\n")
|
||||
f.write(f" Manual new: {source_counts['manual_new']:,} players\n")
|
||||
if source_counts['emergency_new'] > 0:
|
||||
f.write(f" Emergency new: {source_counts['emergency_new']:,} players (ERROR)\n")
|
||||
f.write(f" TOTAL ASSIGNMENTS: {len(assignments):,} players\n\n")
|
||||
|
||||
f.write("NEW SBAPLAYER RECORDS TO CREATE:\n")
|
||||
f.write(f" Total new records: {len(new_sbaplayers)}\n")
|
||||
for new_sba in new_sbaplayers:
|
||||
f.write(f" {new_sba.canonical_name} (temp ID {new_sba.temp_id}) - {new_sba.player_count} players\n")
|
||||
f.write("\n")
|
||||
|
||||
f.write("CAREER STAT TRACKING ENABLED FOR:\n")
|
||||
existing_sbaplayers = len([a for a in assignments if a.assignment_source in ['tier1_bbref', 'tier2_name', 'manual_existing']])
|
||||
f.write(f" {existing_sbaplayers:,} players linked to existing SbaPlayers\n")
|
||||
f.write(f" {source_counts['manual_new']:,} players will have career stats after new SbaPlayer creation\n")
|
||||
f.write(f" TOTAL: {len(assignments):,} players will have career stat tracking\n\n")
|
||||
|
||||
f.write("FILES GENERATED:\n")
|
||||
f.write(" - player_sbaplayer_assignments.csv (ready for API updates)\n")
|
||||
f.write(" - new_sbaplayers_to_insert.csv (new SbaPlayer records to create first)\n\n")
|
||||
|
||||
f.write("NEXT STEPS:\n")
|
||||
f.write("1. Review the assignment files for any issues\n")
|
||||
f.write("2. Create new SbaPlayer records via API (new_sbaplayers_to_insert.csv)\n")
|
||||
f.write("3. Update all player.sbaplayer_id fields via API (player_sbaplayer_assignments.csv)\n")
|
||||
f.write("4. Verify career stat tracking works correctly\n")
|
||||
|
||||
def main():
|
||||
"""Main processing function"""
|
||||
logger.info("Starting final assignment generation (FIXED VERSION)...")
|
||||
|
||||
try:
|
||||
# Load cached data
|
||||
all_players, sbaplayers = load_cached_data()
|
||||
logger.info(f"Loaded {len(all_players)} players and {len(sbaplayers)} SbaPlayers")
|
||||
|
||||
# Run comprehensive matching for automatic assignments
|
||||
logger.info("Running comprehensive matching...")
|
||||
auto_assignments = run_comprehensive_matching(all_players, sbaplayers)
|
||||
|
||||
# Parse manual decisions
|
||||
decisions = parse_manual_decisions()
|
||||
existing_matches, new_player_groups, special_cases = process_manual_decisions(decisions, sbaplayers)
|
||||
|
||||
# Create new SbaPlayer records
|
||||
new_sbaplayers = create_new_sbaplayer_records(new_player_groups, all_players, sbaplayers)
|
||||
|
||||
# Generate complete assignments for ALL players
|
||||
assignments = generate_all_assignments(
|
||||
all_players, sbaplayers, auto_assignments, existing_matches, new_sbaplayers
|
||||
)
|
||||
|
||||
# Save files
|
||||
save_assignment_files(assignments, new_sbaplayers)
|
||||
|
||||
# Generate summary
|
||||
generate_summary_report(assignments, new_sbaplayers)
|
||||
|
||||
logger.info("✅ Final assignment generation completed successfully!")
|
||||
|
||||
# Print summary
|
||||
source_counts = defaultdict(int)
|
||||
for assignment in assignments:
|
||||
source_counts[assignment.assignment_source] += 1
|
||||
|
||||
print(f"\n🎉 FINAL RESULTS:")
|
||||
print(f" 📊 {len(assignments):,} total player assignments generated")
|
||||
print(f" 🔗 {source_counts['tier1_bbref']:,} Tier 1 (bbref_id) matches")
|
||||
print(f" 📝 {source_counts['tier2_name']:,} Tier 2 (exact name) matches")
|
||||
print(f" 👤 {source_counts['manual_existing']:,} Manual existing matches")
|
||||
print(f" ➕ {source_counts['manual_new']:,} Manual new SbaPlayer assignments")
|
||||
if source_counts['emergency_new'] > 0:
|
||||
print(f" 🚨 {source_counts['emergency_new']:,} Emergency assignments (ERROR)")
|
||||
print(f" 📋 {len(new_sbaplayers)} new SbaPlayer records to create")
|
||||
print(f"\n📁 Files generated:")
|
||||
print(f" - player_sbaplayer_assignments.csv")
|
||||
print(f" - new_sbaplayers_to_insert.csv")
|
||||
print(f" - final_assignment_summary.txt")
|
||||
|
||||
# Verify total matches expected result
|
||||
expected_total = len(all_players)
|
||||
if len(assignments) == expected_total:
|
||||
print(f"\n✅ SUCCESS: All {expected_total:,} players successfully assigned!")
|
||||
else:
|
||||
print(f"\n❌ ERROR: Expected {expected_total:,}, got {len(assignments):,} assignments")
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Error generating final assignments: {e}")
|
||||
raise
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@ -0,0 +1,187 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Generate detailed list of players that need new SbaPlayer records for manual review
|
||||
"""
|
||||
import json
|
||||
import csv
|
||||
import logging
|
||||
from dataclasses import dataclass
|
||||
from typing import Dict, List, Set, Optional, Tuple
|
||||
from collections import defaultdict
|
||||
|
||||
# Set up logging
|
||||
logging.basicConfig(level=logging.INFO)
|
||||
logger = logging.getLogger('NewSbaPlayersList')
|
||||
|
||||
@dataclass
|
||||
class PlayerRecord:
|
||||
id: int
|
||||
name: str
|
||||
season: int
|
||||
bbref_id: Optional[str] = None
|
||||
sbaplayer_id: Optional[int] = None
|
||||
|
||||
def load_cached_data():
|
||||
"""Load cached data"""
|
||||
with open('/tmp/sbaplayers.json', 'r') as f:
|
||||
sbaplayer_data = json.load(f)
|
||||
|
||||
all_players = []
|
||||
for season in range(1, 13):
|
||||
with open(f"/tmp/players_season_{season}.json", 'r') as f:
|
||||
season_data = json.load(f)
|
||||
|
||||
for data in season_data:
|
||||
all_players.append(PlayerRecord(**data))
|
||||
|
||||
return all_players, sbaplayer_data
|
||||
|
||||
def normalize_name(name: str) -> str:
|
||||
"""Normalize name for matching"""
|
||||
if not name:
|
||||
return ""
|
||||
return name.lower().strip().replace("'", "").replace(".", "").replace("-", " ")
|
||||
|
||||
def find_unmatched_players():
|
||||
"""Find players that would need new SbaPlayer records"""
|
||||
all_players, sbaplayer_data = load_cached_data()
|
||||
|
||||
# Create SbaPlayer lookup maps
|
||||
sbaplayers_by_bbref = {}
|
||||
sbaplayers_by_name = {}
|
||||
|
||||
for sba in sbaplayer_data:
|
||||
if sba.get('key_bbref'):
|
||||
sbaplayers_by_bbref[sba['key_bbref']] = sba
|
||||
|
||||
sba_name = f"{sba['first_name']} {sba['last_name']}"
|
||||
normalized_sba = normalize_name(sba_name)
|
||||
if normalized_sba not in sbaplayers_by_name:
|
||||
sbaplayers_by_name[normalized_sba] = []
|
||||
sbaplayers_by_name[normalized_sba].append(sba)
|
||||
|
||||
# Find unmatched players
|
||||
unmatched_groups = {}
|
||||
|
||||
for player in all_players:
|
||||
matched = False
|
||||
|
||||
# Try bbref_id match
|
||||
if player.bbref_id and player.bbref_id in sbaplayers_by_bbref:
|
||||
matched = True
|
||||
|
||||
# Try name match
|
||||
if not matched:
|
||||
normalized_player = normalize_name(player.name)
|
||||
if normalized_player in sbaplayers_by_name:
|
||||
if len(sbaplayers_by_name[normalized_player]) == 1:
|
||||
matched = True
|
||||
|
||||
# If not matched, add to unmatched groups
|
||||
if not matched:
|
||||
if player.bbref_id:
|
||||
key = f"bbref:{player.bbref_id}"
|
||||
else:
|
||||
key = f"name:{normalize_name(player.name)}"
|
||||
|
||||
if key not in unmatched_groups:
|
||||
unmatched_groups[key] = []
|
||||
unmatched_groups[key].append(player)
|
||||
|
||||
return unmatched_groups, sbaplayers_by_name, sbaplayer_data
|
||||
|
||||
def generate_review_csv():
|
||||
"""Generate CSV file for manual review"""
|
||||
unmatched_groups, sbaplayers_by_name, sbaplayer_data = find_unmatched_players()
|
||||
|
||||
output_file = '/mnt/NV2/Development/major-domo/database/player-to-sbaplayer-matching/new_sbaplayers_for_review.csv'
|
||||
|
||||
with open(output_file, 'w', newline='') as csvfile:
|
||||
writer = csv.writer(csvfile)
|
||||
writer.writerow([
|
||||
'group_key', 'player_name', 'bbref_id', 'seasons_appeared', 'sample_player_ids',
|
||||
'potential_existing_sbaplayer_id', 'potential_existing_sbaplayer_name', 'potential_match_reason',
|
||||
'your_decision_sbaplayer_id', 'your_decision_notes'
|
||||
])
|
||||
|
||||
for key, players in unmatched_groups.items():
|
||||
# Use first player as representative
|
||||
representative = players[0]
|
||||
seasons = sorted(list(set(p.season for p in players)))
|
||||
sample_ids = [str(p.id) for p in players[:3]] # Show first 3 player IDs
|
||||
|
||||
# Look for potential matches
|
||||
potential_id = ""
|
||||
potential_name = ""
|
||||
potential_reason = ""
|
||||
|
||||
normalized_name = normalize_name(representative.name)
|
||||
|
||||
# Check for similar names in existing SbaPlayers
|
||||
for sba in sbaplayer_data:
|
||||
sba_name = f"{sba['first_name']} {sba['last_name']}"
|
||||
sba_normalized = normalize_name(sba_name)
|
||||
|
||||
# Exact match that was somehow missed
|
||||
if sba_normalized == normalized_name:
|
||||
potential_id = str(sba['id'])
|
||||
potential_name = sba_name
|
||||
potential_reason = "Exact name match - check why not matched automatically"
|
||||
break
|
||||
|
||||
# Check for common variations
|
||||
player_parts = normalized_name.split()
|
||||
sba_parts = sba_normalized.split()
|
||||
|
||||
if len(player_parts) >= 2 and len(sba_parts) >= 2:
|
||||
# Same last name, similar first name
|
||||
if (player_parts[-1] == sba_parts[-1] and
|
||||
(player_parts[0] in sba_parts[0] or sba_parts[0] in player_parts[0])):
|
||||
if not potential_id: # Only suggest first match
|
||||
potential_id = f"MAYBE:{sba['id']}"
|
||||
potential_name = sba_name
|
||||
potential_reason = f"Similar name: {representative.name} vs {sba_name}"
|
||||
|
||||
if not potential_id:
|
||||
potential_reason = "No obvious existing match - likely needs new SbaPlayer record"
|
||||
|
||||
writer.writerow([
|
||||
key,
|
||||
representative.name,
|
||||
representative.bbref_id or '',
|
||||
','.join(map(str, seasons)),
|
||||
','.join(sample_ids),
|
||||
potential_id,
|
||||
potential_name,
|
||||
potential_reason,
|
||||
'', # your_decision_sbaplayer_id (empty for manual filling)
|
||||
'' # your_decision_notes (empty for manual filling)
|
||||
])
|
||||
|
||||
logger.info(f"Generated review CSV: {output_file}")
|
||||
logger.info(f"Found {len(unmatched_groups)} unique unmatched players for review")
|
||||
|
||||
# Also generate a summary
|
||||
with open('/mnt/NV2/Development/major-domo/database/player-to-sbaplayer-matching/new_sbaplayers_summary.txt', 'w') as f:
|
||||
f.write("NEW SBAPLAYERS REVIEW SUMMARY\n")
|
||||
f.write("=" * 40 + "\n\n")
|
||||
f.write(f"Total unique players needing review: {len(unmatched_groups)}\n\n")
|
||||
|
||||
f.write("INSTRUCTIONS:\n")
|
||||
f.write("1. Review the CSV file: new_sbaplayers_for_review.csv\n")
|
||||
f.write("2. For each row, fill in 'your_decision_sbaplayer_id' column:\n")
|
||||
f.write(" - Enter existing SbaPlayer ID if you found a match\n")
|
||||
f.write(" - Leave blank if player needs a new SbaPlayer record\n")
|
||||
f.write("3. Use 'your_decision_notes' for any comments\n\n")
|
||||
|
||||
f.write("SAMPLE ENTRIES:\n")
|
||||
for i, (key, players) in enumerate(list(unmatched_groups.items())[:5]):
|
||||
representative = players[0]
|
||||
seasons = sorted(list(set(p.season for p in players)))
|
||||
f.write(f" {representative.name} (bbref: {representative.bbref_id or 'None'}) - seasons {seasons}\n")
|
||||
|
||||
if len(unmatched_groups) > 5:
|
||||
f.write(f" ... and {len(unmatched_groups) - 5} more\n")
|
||||
|
||||
if __name__ == "__main__":
|
||||
generate_review_csv()
|
||||
@ -0,0 +1,203 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Generate raw SQL UPDATE statements for bulk player sbaplayer_id assignments
|
||||
Output can be copied and pasted into Adminer or run via docker exec
|
||||
"""
|
||||
|
||||
import csv
|
||||
import logging
|
||||
from collections import defaultdict
|
||||
|
||||
# Set up logging
|
||||
logging.basicConfig(
|
||||
level=logging.INFO,
|
||||
format='%(asctime)s - %(levelname)s - %(message)s',
|
||||
handlers=[
|
||||
logging.FileHandler('sql_generation.log'),
|
||||
logging.StreamHandler()
|
||||
]
|
||||
)
|
||||
logger = logging.getLogger('generate_update_sql')
|
||||
|
||||
def load_assignments():
|
||||
"""Load player assignments from CSV file"""
|
||||
assignments = []
|
||||
|
||||
logger.info("Loading player assignments from player_sbaplayer_assignments.csv...")
|
||||
|
||||
with open('player_sbaplayer_assignments.csv', 'r') as f:
|
||||
reader = csv.DictReader(f)
|
||||
for row in reader:
|
||||
assignments.append({
|
||||
'player_id': int(row['player_id']),
|
||||
'assigned_sbaplayer_id': int(row['assigned_sbaplayer_id']),
|
||||
'assignment_source': row['assignment_source']
|
||||
})
|
||||
|
||||
logger.info(f"Loaded {len(assignments)} player assignments")
|
||||
return assignments
|
||||
|
||||
def generate_sql_statements(assignments, max_ids_per_statement=1000):
|
||||
"""Generate SQL UPDATE statements grouped by sbaplayer_id"""
|
||||
|
||||
# Group assignments by sbaplayer_id for efficiency
|
||||
by_sbaplayer = defaultdict(list)
|
||||
for assignment in assignments:
|
||||
sbaplayer_id = assignment['assigned_sbaplayer_id']
|
||||
by_sbaplayer[sbaplayer_id].append(assignment['player_id'])
|
||||
|
||||
logger.info(f"Grouped assignments into {len(by_sbaplayer)} unique sbaplayer_id groups")
|
||||
|
||||
sql_statements = []
|
||||
total_players = 0
|
||||
|
||||
for sbaplayer_id, player_ids in by_sbaplayer.items():
|
||||
# Split large groups into chunks to avoid overly long SQL statements
|
||||
for i in range(0, len(player_ids), max_ids_per_statement):
|
||||
chunk = player_ids[i:i + max_ids_per_statement]
|
||||
|
||||
sql = f"""UPDATE player
|
||||
SET sbaplayer_id = {sbaplayer_id}
|
||||
WHERE id IN ({','.join(map(str, chunk))});"""
|
||||
|
||||
sql_statements.append(sql)
|
||||
total_players += len(chunk)
|
||||
|
||||
logger.info(f"Generated {len(sql_statements)} SQL statements covering {total_players} players")
|
||||
return sql_statements
|
||||
|
||||
def write_sql_file(sql_statements, filename='player_sbaplayer_updates.sql'):
|
||||
"""Write SQL statements to file"""
|
||||
|
||||
with open(filename, 'w') as f:
|
||||
f.write("-- Bulk update player.sbaplayer_id assignments\n")
|
||||
f.write("-- Generated from player-to-sbaplayer matching project\n")
|
||||
f.write(f"-- Total statements: {len(sql_statements)}\n")
|
||||
f.write("-- \n")
|
||||
f.write("-- IMPORTANT: Run these in a transaction for safety:\n")
|
||||
f.write("-- BEGIN;\n")
|
||||
f.write("-- <paste statements here>\n")
|
||||
f.write("-- COMMIT;\n")
|
||||
f.write("\n")
|
||||
f.write("BEGIN;\n\n")
|
||||
|
||||
for i, sql in enumerate(sql_statements, 1):
|
||||
f.write(f"-- Statement {i}\n")
|
||||
f.write(sql)
|
||||
f.write("\n\n")
|
||||
|
||||
f.write("COMMIT;\n")
|
||||
|
||||
logger.info(f"SQL statements written to {filename}")
|
||||
|
||||
def generate_verification_sql(assignments, sample_size=100):
|
||||
"""Generate SQL to verify updates were applied correctly"""
|
||||
|
||||
# Take a sample for verification
|
||||
sample_assignments = assignments[:sample_size]
|
||||
|
||||
verification_sql = """-- Verification queries
|
||||
-- Check sample assignments were applied correctly
|
||||
|
||||
"""
|
||||
|
||||
for i, assignment in enumerate(sample_assignments[:10], 1):
|
||||
player_id = assignment['player_id']
|
||||
expected_sbaplayer_id = assignment['assigned_sbaplayer_id']
|
||||
|
||||
verification_sql += f"""-- Check player {player_id}
|
||||
SELECT id, name, sbaplayer_id
|
||||
FROM player
|
||||
WHERE id = {player_id} AND sbaplayer_id = {expected_sbaplayer_id};
|
||||
|
||||
"""
|
||||
|
||||
verification_sql += f"""
|
||||
-- Summary check: Count of players with non-null sbaplayer_id
|
||||
SELECT COUNT(*) as players_with_sbaplayer_id
|
||||
FROM player
|
||||
WHERE sbaplayer_id IS NOT NULL;
|
||||
-- Expected result: should be close to 12,232
|
||||
|
||||
-- Check distribution by assignment source type
|
||||
SELECT
|
||||
CASE
|
||||
WHEN sbaplayer_id < 3000 THEN 'existing_sbaplayer'
|
||||
ELSE 'new_sbaplayer'
|
||||
END as assignment_type,
|
||||
COUNT(*) as player_count
|
||||
FROM player
|
||||
WHERE sbaplayer_id IS NOT NULL
|
||||
GROUP BY assignment_type;
|
||||
"""
|
||||
|
||||
with open('verify_updates.sql', 'w') as f:
|
||||
f.write(verification_sql)
|
||||
|
||||
logger.info("Verification SQL written to verify_updates.sql")
|
||||
|
||||
def show_summary_stats(assignments):
|
||||
"""Show summary statistics"""
|
||||
by_source = defaultdict(int)
|
||||
by_sbaplayer = defaultdict(int)
|
||||
|
||||
for assignment in assignments:
|
||||
by_source[assignment['assignment_source']] += 1
|
||||
by_sbaplayer[assignment['assigned_sbaplayer_id']] += 1
|
||||
|
||||
logger.info("=== Assignment Summary ===")
|
||||
logger.info(f"Total players to update: {len(assignments):,}")
|
||||
logger.info("By assignment source:")
|
||||
for source, count in sorted(by_source.items()):
|
||||
logger.info(f" {source}: {count:,} players")
|
||||
|
||||
logger.info(f"Unique SbaPlayer IDs: {len(by_sbaplayer):,}")
|
||||
|
||||
# Show new vs existing SbaPlayers
|
||||
new_sbaplayers = sum(1 for sbaplayer_id in by_sbaplayer.keys() if sbaplayer_id >= 3000)
|
||||
existing_sbaplayers = len(by_sbaplayer) - new_sbaplayers
|
||||
|
||||
logger.info(f" Existing SbaPlayers: {existing_sbaplayers}")
|
||||
logger.info(f" New SbaPlayers: {new_sbaplayers}")
|
||||
|
||||
def main():
|
||||
"""Main execution function"""
|
||||
logger.info("Starting SQL generation for player sbaplayer_id updates...")
|
||||
|
||||
try:
|
||||
# Load assignments
|
||||
assignments = load_assignments()
|
||||
|
||||
if not assignments:
|
||||
logger.error("No assignments loaded. Exiting.")
|
||||
return
|
||||
|
||||
# Show summary statistics
|
||||
show_summary_stats(assignments)
|
||||
|
||||
# Generate SQL statements
|
||||
sql_statements = generate_sql_statements(assignments)
|
||||
|
||||
# Write to file
|
||||
write_sql_file(sql_statements)
|
||||
|
||||
# Generate verification SQL
|
||||
generate_verification_sql(assignments)
|
||||
|
||||
logger.info("=== SUCCESS ===")
|
||||
logger.info("Generated files:")
|
||||
logger.info(" 📄 player_sbaplayer_updates.sql - Main update statements")
|
||||
logger.info(" 🔍 verify_updates.sql - Verification queries")
|
||||
logger.info("")
|
||||
logger.info("Next steps:")
|
||||
logger.info("1. Copy player_sbaplayer_updates.sql to your server")
|
||||
logger.info("2. Run via Adminer or docker exec:")
|
||||
logger.info(" docker exec -i postgres_container psql -U username -d database < player_sbaplayer_updates.sql")
|
||||
logger.info("3. Run verify_updates.sql to confirm success")
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Error generating SQL: {e}")
|
||||
raise
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@ -0,0 +1,57 @@
|
||||
COMPREHENSIVE PLAYER MATCHING REPORT
|
||||
==================================================
|
||||
|
||||
MATCHING SUMMARY:
|
||||
Tier 1 (bbref_id): 6,764 player records
|
||||
Tier 2 (exact name): 4,868 player records
|
||||
Total matched: 11,632 player records
|
||||
Unmatched: 600 player records (31 unique players)
|
||||
|
||||
TIER 1 EXAMPLES (bbref_id matches):
|
||||
Danny Duffy (duffyda01) → Danny Duffy (ID: 541)
|
||||
Danny Duffy (duffyda01) → Danny Duffy (ID: 541)
|
||||
Robbie Ray (rayro02) → Robbie Ray (ID: 1620)
|
||||
Robbie Ray (rayro02) → Robbie Ray (ID: 1620)
|
||||
Robbie Ray (rayro02) → Robbie Ray (ID: 1620)
|
||||
Robbie Ray (rayro02) → Robbie Ray (ID: 1620)
|
||||
Robbie Ray (rayro02) → Robbie Ray (ID: 1620)
|
||||
Wade Miley (mileywa01) → Wade Miley (ID: 1318)
|
||||
Wade Miley (mileywa01) → Wade Miley (ID: 1318)
|
||||
Wade Miley (mileywa01) → Wade Miley (ID: 1318)
|
||||
... and 6754 more
|
||||
|
||||
TIER 2 EXAMPLES (exact name matches):
|
||||
AJ Minter → AJ Minter (ID: 1336)
|
||||
AJ Minter → AJ Minter (ID: 1336)
|
||||
AJ Minter → AJ Minter (ID: 1336)
|
||||
AJ Minter → AJ Minter (ID: 1336)
|
||||
AJ Minter → AJ Minter (ID: 1336)
|
||||
AJ Ellis → AJ Ellis (ID: 570)
|
||||
AJ Pollock → AJ Pollock (ID: 1571)
|
||||
AJ Pollock → AJ Pollock (ID: 1571)
|
||||
AJ Pollock → AJ Pollock (ID: 1571)
|
||||
AJ Pollock → AJ Pollock (ID: 1571)
|
||||
... and 4858 more
|
||||
|
||||
SAMPLE UNMATCHED PLAYERS (need new SbaPlayer records):
|
||||
Diego Castillo (bbref: None) - seasons [1, 2, 3, 4, 5]
|
||||
Javy Guerra (bbref: None) - seasons [1, 2, 3, 4, 5]
|
||||
Michael A Taylor (bbref: None) - seasons [1, 2, 3, 4, 5]
|
||||
Will Smith (bbref: None) - seasons [1, 2, 3, 4, 5]
|
||||
Evan Phillips (bbref: None) - seasons [2, 3, 4, 5]
|
||||
Francisco Mejia (bbref: None) - seasons [2, 3, 4, 5]
|
||||
Nate Lowe (bbref: None) - seasons [2, 3, 4, 5]
|
||||
Tom Eshelman (bbref: None) - seasons [2, 3]
|
||||
Will D Smith (bbref: None) - seasons [2, 3, 4, 5]
|
||||
Zach Britton (bbref: None) - seasons [2]
|
||||
Luis V Garcia (bbref: None) - seasons [4, 5]
|
||||
Jose Garcia (bbref: None) - seasons [4, 5]
|
||||
Josh Fuentes (bbref: None) - seasons [4, 5]
|
||||
Javy A Guerra (bbref: None) - seasons [4]
|
||||
Logan Allen (bbref: None) - seasons [4, 5]
|
||||
Luis H Garcia (bbref: None) - seasons [4, 5]
|
||||
Thomas Eshelman (bbref: None) - seasons [4, 5]
|
||||
Tom Hatch (bbref: None) - seasons [4, 5]
|
||||
Luis H Garcia (bbref: garcilu05) - seasons [6, 7, 8, 9]
|
||||
Danny Coulombe (bbref: couloda01) - seasons [6, 7, 10, 11, 12]
|
||||
... and 11 more unique players
|
||||
@ -0,0 +1,33 @@
|
||||
group+AF8-key,player+AF8-name,bbref+AF8-id,seasons+AF8-appeared,sample+AF8-player+AF8-ids,potential+AF8-existing+AF8-sbaplayer+AF8-id,potential+AF8-existing+AF8-sbaplayer+AF8-name,potential+AF8-match+AF8-reason,your+AF8-decision+AF8-sbaplayer+AF8-id,your+AF8-decision+AF8-notes
|
||||
name:albert almora,Albert Almora,,+ACI-1,2,3,4,5+ACI-,+ACI-2039,33,1039+ACI-,,,No obvious existing match +AC0- likely needs new SbaPlayer record,,
|
||||
name:diego castillo,Diego Castillo,,+ACI-1,2,3,4,5+ACI-,+ACI-2234,261,1267+ACI-,341,Diego Castillo,Exact name match +AC0- check why not matched automatically,,+ACI-While this is a duplicate name, this is a different Diego Castillo so needs a new SbaPlayer record+ACI-
|
||||
name:javy guerra,Javy Guerra,,+ACI-1,2,3,4,5+ACI-,+ACI-2623,424,1430+ACI-,784,Javy Guerra,Exact name match +AC0- check why not matched automatically,,
|
||||
name:luis garcia,Luis Garcia,,+ACI-1,2,3,4,5+ACI-,+ACI-2764,602,1608+ACI-,,,No obvious existing match +AC0- likely needs new SbaPlayer record,,
|
||||
name:michael a taylor,Michael A Taylor,,+ACI-1,2,3,4,5+ACI-,+ACI-2817,666,1672+ACI-,MAYBE:1963,Michael Taylor,Similar name: Michael A Taylor vs Michael Taylor,1963,
|
||||
name:will smith,Will Smith,,+ACI-1,2,3,4,5+ACI-,+ACI-3039,960,1966+ACI-,1841,Will Smith,Exact name match +AC0- check why not matched automatically,1843,
|
||||
name:evan phillips,Evan Phillips,,+ACI-2,3,4,5+ACI-,+ACI-309,1315,3753+ACI-,,,No obvious existing match +AC0- likely needs new SbaPlayer record,,
|
||||
name:francisco mejia,Francisco Mejia,,+ACI-2,3,4,5+ACI-,+ACI-319,1325,3234+ACI-,,,No obvious existing match +AC0- likely needs new SbaPlayer record,,
|
||||
name:mike soroka,Mike Soroka,,+ACI-2,3,4,5+ACI-,+ACI-690,1696,3948+ACI-,,,No obvious existing match +AC0- likely needs new SbaPlayer record,,
|
||||
name:nate lowe,Nate Lowe,,+ACI-2,3,4,5+ACI-,+ACI-704,1710,3440+ACI-,,,No obvious existing match +AC0- likely needs new SbaPlayer record,1155,
|
||||
name:tom eshelman,Tom Eshelman,,+ACI-2,3+ACI-,+ACI-887,1893+ACI-,,,No obvious existing match +AC0- likely needs new SbaPlayer record,,Three+AC0-way match: use name Tom Eshelman
|
||||
name:will d smith,Will D Smith,,+ACI-2,3,4,5+ACI-,+ACI-958,1964,3557+ACI-,MAYBE:1841,Will Smith,Similar name: Will D Smith vs Will Smith,1841,
|
||||
name:zach britton,Zach Britton,,2,1000,,,No obvious existing match +AC0- likely needs new SbaPlayer record,260,
|
||||
name:luis v garcia,Luis V Garcia,,+ACI-4,5+ACI-,+ACI-3386,5016+ACI-,,,No obvious existing match +AC0- likely needs new SbaPlayer record,694,
|
||||
name:jose garcia,Jose Garcia,,+ACI-4,5+ACI-,+ACI-3323,4975+ACI-,,,No obvious existing match +AC0- likely needs new SbaPlayer record,,
|
||||
name:josh fuentes,Josh Fuentes,,+ACI-4,5+ACI-,+ACI-3334,4184+ACI-,MAYBE:664,Joshua Fuentes,Similar name: Josh Fuentes vs Joshua Fuentes,664,
|
||||
name:javy a guerra,Javy A Guerra,,4,3810,MAYBE:784,Javy Guerra,Similar name: Javy A Guerra vs Javy Guerra,784,
|
||||
name:logan allen,Logan Allen,,+ACI-4,5+ACI-,+ACI-3904,4637+ACI-,45,Logan Allen,Exact name match +AC0- check why not matched automatically,,+ACI-This is a duplicate name, but they are different people+ACI-
|
||||
name:luis h garcia,Luis H Garcia,,+ACI-4,5+ACI-,+ACI-3913,4187+ACI-,,,No obvious existing match +AC0- likely needs new SbaPlayer record,,
|
||||
name:thomas eshelman,Thomas Eshelman,,+ACI-4,5+ACI-,+ACI-4056,4502+ACI-,,,No obvious existing match +AC0- likely needs new SbaPlayer record,,Three+AC0-way match: use name Tom Eshelman
|
||||
name:tom hatch,Tom Hatch,,+ACI-4,5+ACI-,+ACI-4060,4353+ACI-,,,No obvious existing match +AC0- likely needs new SbaPlayer record,,
|
||||
bbref:garcilu05,Luis H Garcia,garcilu05,+ACI-6,7,8,9+ACI-,+ACI-5281,6485,7877+ACI-,,,No obvious existing match +AC0- likely needs new SbaPlayer record,,
|
||||
bbref:couloda01,Danny Coulombe,couloda01,+ACI-6,7,10,11,12+ACI-,+ACI-5464,6748,9552+ACI-,,,No obvious existing match +AC0- likely needs new SbaPlayer record,,
|
||||
bbref:garcilu03,Luis Garcia,garcilu03,+ACI-6,7,8,9,10,11,12+ACI-,+ACI-5465,6751,7876+ACI-,,,No obvious existing match +AC0- likely needs new SbaPlayer record,,
|
||||
bbref:eshelto01,Thomas Eshelman,eshelto01,+ACI-6,7+ACI-,+ACI-5575,6949+ACI-,,,No obvious existing match +AC0- likely needs new SbaPlayer record,,Three+AC0-way match: use name Tom Eshelman
|
||||
bbref:mejiaje02,JC Mejia,mejiaje02,+ACI-6,7+ACI-,+ACI-5635,7009+ACI-,,,No obvious existing match +AC0- likely needs new SbaPlayer record,,
|
||||
bbref:mejiafr01,Francisco Mejia,mejiafr01,+ACI-6,7,8,9+ACI-,+ACI-5817,6381,7570+ACI-,,,No obvious existing match +AC0- likely needs new SbaPlayer record,,
|
||||
bbref:phillev01,Evan Phillips,phillev01,+ACI-8,9,10,11,12+ACI-,+ACI-7564,8618,9622+ACI-,,,No obvious existing match +AC0- likely needs new SbaPlayer record,,
|
||||
bbref:taylomi01,Michael A Taylor,taylomi01,+ACI-8,9+ACI-,+ACI-7956,9007+ACI-,MAYBE:1963,Michael Taylor,Similar name: Michael A Taylor vs Michael Taylor,1963,
|
||||
bbref:HALP,Francisco Mejia,HALP,+ACI-10,11+ACI-,+ACI-9632,9907,9932+ACI-,,,No obvious existing match +AC0- likely needs new SbaPlayer record,,Two+AC0-way match: join with bbref+AF8-id mejiafr01
|
||||
bbref:fundeko01,Kody Funderburk,fundeko01,12,12049,,,No obvious existing match +AC0- likely needs new SbaPlayer record,,
|
||||
bbref:phillty01,Tyler Phillips,phillty01,12,12422,,,No obvious existing match +AC0- likely needs new SbaPlayer record,,
|
||||
|
@ -0,0 +1,19 @@
|
||||
NEW SBAPLAYERS REVIEW SUMMARY
|
||||
========================================
|
||||
|
||||
Total unique players needing review: 32
|
||||
|
||||
INSTRUCTIONS:
|
||||
1. Review the CSV file: new_sbaplayers_for_review.csv
|
||||
2. For each row, fill in 'your_decision_sbaplayer_id' column:
|
||||
- Enter existing SbaPlayer ID if you found a match
|
||||
- Leave blank if player needs a new SbaPlayer record
|
||||
3. Use 'your_decision_notes' for any comments
|
||||
|
||||
SAMPLE ENTRIES:
|
||||
Albert Almora (bbref: None) - seasons [1, 2, 3, 4, 5]
|
||||
Diego Castillo (bbref: None) - seasons [1, 2, 3, 4, 5]
|
||||
Javy Guerra (bbref: None) - seasons [1, 2, 3, 4, 5]
|
||||
Luis Garcia (bbref: None) - seasons [1, 2, 3, 4, 5]
|
||||
Michael A Taylor (bbref: None) - seasons [1, 2, 3, 4, 5]
|
||||
... and 27 more
|
||||
@ -0,0 +1,15 @@
|
||||
temp_id,canonical_name,first_name,last_name,key_bbref,name_variations,player_count,notes
|
||||
3234,Albert Almora,Albert,Almora,,Albert Almora,5,Created from manual review. Variations: Albert Almora
|
||||
3236,Javy Guerra,Javy,Guerra,,Javy Guerra,5,Created from manual review. Variations: Javy Guerra
|
||||
3237,Luis Garcia,Luis,Garcia,garcilu03,"Luis Garcia, Luis Garcia",12,Created from manual review. Variations: Luis Garcia
|
||||
3238,Evan Phillips,Evan,Phillips,phillev01,"Evan Phillips, Evan Phillips",9,Created from manual review. Variations: Evan Phillips
|
||||
3239,Francisco Mejia,Francisco,Mejia,mejiafr01,"Francisco Mejia, Francisco Mejia, Francisco Mejia",10,Created from manual review. Variations: Francisco Mejia
|
||||
3240,Mike Soroka,Mike,Soroka,,Mike Soroka,4,Created from manual review. Variations: Mike Soroka
|
||||
3241,Tom Eshelman,Tom,Eshelman,eshelto01,"Tom Eshelman, Thomas Eshelman, Thomas Eshelman",6,"Created from manual review. Variations: Thomas Eshelman, Tom Eshelman"
|
||||
3242,Jose Garcia,Jose,Garcia,,Jose Garcia,2,Created from manual review. Variations: Jose Garcia
|
||||
3244,Luis H Garcia,Luis,H Garcia,garcilu05,"Luis H Garcia, Luis H Garcia",8,Created from manual review. Variations: Luis H Garcia
|
||||
3245,Tom Hatch,Tom,Hatch,,Tom Hatch,2,Created from manual review. Variations: Tom Hatch
|
||||
3246,Danny Coulombe,Danny,Coulombe,couloda01,Danny Coulombe,2,Created from manual review. Variations: Danny Coulombe
|
||||
3247,JC Mejia,JC,Mejia,mejiaje02,JC Mejia,2,Created from manual review. Variations: JC Mejia
|
||||
3248,Kody Funderburk,Kody,Funderburk,fundeko01,Kody Funderburk,1,Created from manual review. Variations: Kody Funderburk
|
||||
3249,Tyler Phillips,Tyler,Phillips,phillty01,Tyler Phillips,1,Created from manual review. Variations: Tyler Phillips
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,192 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Post new SbaPlayer records to production API
|
||||
"""
|
||||
|
||||
import csv
|
||||
import json
|
||||
import requests
|
||||
import logging
|
||||
import os
|
||||
import argparse
|
||||
from typing import Dict, List, Optional
|
||||
|
||||
# Set up logging
|
||||
logging.basicConfig(
|
||||
level=logging.INFO,
|
||||
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
|
||||
handlers=[
|
||||
logging.FileHandler('matching.log'),
|
||||
logging.StreamHandler()
|
||||
]
|
||||
)
|
||||
logger = logging.getLogger(f'{__name__}.post_new_sbaplayers')
|
||||
|
||||
# Production API configuration
|
||||
API_BASE_URL = "https://api.sba.manticorum.com"
|
||||
SBAPLAYERS_ENDPOINT = f"{API_BASE_URL}/sbaplayers"
|
||||
|
||||
def get_api_token(token_arg=None):
|
||||
"""Get API token from argument, environment, or prompt user"""
|
||||
if token_arg:
|
||||
return token_arg
|
||||
|
||||
api_token = os.getenv('API_TOKEN')
|
||||
if not api_token:
|
||||
print("API_TOKEN environment variable not found.")
|
||||
api_token = input("Please enter your API token: ").strip()
|
||||
return api_token
|
||||
|
||||
def load_new_sbaplayers():
|
||||
"""Load new SbaPlayer records from CSV file"""
|
||||
new_players = []
|
||||
|
||||
logger.info("Loading new SbaPlayers from new_sbaplayers_to_insert.csv...")
|
||||
|
||||
with open('./new_sbaplayers_to_insert.csv', 'r') as f:
|
||||
reader = csv.DictReader(f)
|
||||
for row in reader:
|
||||
# Convert CSV row to API format
|
||||
player = {
|
||||
"first_name": row['first_name'],
|
||||
"last_name": row['last_name'],
|
||||
"key_bbref": row['key_bbref'] if row['key_bbref'] else None,
|
||||
"key_fangraphs": None, # We don't have fangraphs IDs
|
||||
"key_mlbam": None, # We don't have MLBAM IDs
|
||||
"key_retro": None # We don't have retro IDs
|
||||
}
|
||||
new_players.append(player)
|
||||
|
||||
logger.info(f"Loaded {len(new_players)} new SbaPlayer records")
|
||||
return new_players
|
||||
|
||||
def post_sbaplayers_bulk(players: List[Dict], api_token: str) -> bool:
|
||||
"""Post multiple SbaPlayers via bulk endpoint"""
|
||||
|
||||
payload = {
|
||||
"players": players
|
||||
}
|
||||
|
||||
headers = {
|
||||
"Authorization": f"Bearer {api_token}",
|
||||
"Content-Type": "application/json"
|
||||
}
|
||||
|
||||
logger.info(f"Posting {len(players)} new SbaPlayers to {SBAPLAYERS_ENDPOINT}...")
|
||||
|
||||
try:
|
||||
response = requests.post(SBAPLAYERS_ENDPOINT, json=payload, headers=headers, timeout=30)
|
||||
|
||||
if response.status_code == 200:
|
||||
logger.info(f"✅ SUCCESS: {response.text}")
|
||||
return True
|
||||
else:
|
||||
logger.error(f"❌ API Error {response.status_code}: {response.text}")
|
||||
return False
|
||||
|
||||
except requests.exceptions.RequestException as e:
|
||||
logger.error(f"❌ Request failed: {e}")
|
||||
return False
|
||||
|
||||
def verify_posted_players(players: List[Dict], api_token: str):
|
||||
"""Verify that the posted players exist in the database"""
|
||||
|
||||
headers = {
|
||||
"Authorization": f"Bearer {api_token}",
|
||||
"Content-Type": "application/json"
|
||||
}
|
||||
|
||||
logger.info("Verifying posted players...")
|
||||
|
||||
for player in players:
|
||||
full_name = f"{player['first_name']} {player['last_name']}"
|
||||
|
||||
# Search by full name
|
||||
params = {"full_name": [full_name]}
|
||||
|
||||
try:
|
||||
response = requests.get(SBAPLAYERS_ENDPOINT, params=params, headers=headers, timeout=10)
|
||||
|
||||
if response.status_code == 200:
|
||||
data = response.json()
|
||||
if data['count'] > 0:
|
||||
sba_player = data['players'][0]
|
||||
logger.info(f"✅ Verified: {full_name} -> SbaPlayer ID {sba_player['id']}")
|
||||
else:
|
||||
logger.warning(f"⚠️ Not found: {full_name}")
|
||||
else:
|
||||
logger.error(f"❌ Verification failed for {full_name}: {response.status_code}")
|
||||
|
||||
except requests.exceptions.RequestException as e:
|
||||
logger.error(f"❌ Verification request failed for {full_name}: {e}")
|
||||
|
||||
def main():
|
||||
"""Main execution function"""
|
||||
parser = argparse.ArgumentParser(description='Post new SbaPlayer records to production API')
|
||||
parser.add_argument('--token', help='API token for authentication')
|
||||
parser.add_argument('--confirm', action='store_true', help='Skip confirmation prompt')
|
||||
parser.add_argument('--dry-run', action='store_true', help='Show what would be posted without actually posting')
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
logger.info("Starting SbaPlayer creation process...")
|
||||
|
||||
try:
|
||||
# Load new players
|
||||
new_players = load_new_sbaplayers()
|
||||
|
||||
if not new_players:
|
||||
logger.warning("No new players to post. Exiting.")
|
||||
return
|
||||
|
||||
# Show preview
|
||||
print(f"\n📋 PREVIEW: About to create {len(new_players)} new SbaPlayer records:")
|
||||
for i, player in enumerate(new_players, 1):
|
||||
bbref_info = f" (bbref: {player['key_bbref']})" if player['key_bbref'] else ""
|
||||
print(f" {i:2d}. {player['first_name']} {player['last_name']}{bbref_info}")
|
||||
|
||||
if args.dry_run:
|
||||
print(f"\n🧪 DRY RUN: Would create {len(new_players)} new SbaPlayer records")
|
||||
print("JSON payload preview:")
|
||||
print(json.dumps({"players": new_players[:3]}, indent=2))
|
||||
if len(new_players) > 3:
|
||||
print(f"... and {len(new_players) - 3} more players")
|
||||
return
|
||||
|
||||
# Get API token (only needed for actual posting)
|
||||
api_token = get_api_token(args.token)
|
||||
if not api_token:
|
||||
logger.error("No API token provided. Exiting.")
|
||||
return
|
||||
|
||||
# Confirm with user (unless --confirm flag is used)
|
||||
if not args.confirm:
|
||||
print(f"\n🚨 WARNING: This will create {len(new_players)} new records in the PRODUCTION database!")
|
||||
confirm = input("Are you sure you want to proceed? (yes/no): ").strip().lower()
|
||||
|
||||
if confirm not in ['yes', 'y']:
|
||||
logger.info("User cancelled. No records created.")
|
||||
return
|
||||
|
||||
# Bulk insert
|
||||
logger.info("Posting via bulk endpoint...")
|
||||
success = post_sbaplayers_bulk(new_players, api_token)
|
||||
|
||||
if success:
|
||||
logger.info("✅ Bulk insert completed successfully!")
|
||||
|
||||
# Verify the results
|
||||
print(f"\n🔍 Verifying created players...")
|
||||
verify_posted_players(new_players, api_token)
|
||||
else:
|
||||
logger.error("❌ Bulk insert failed. Check the error messages above.")
|
||||
|
||||
logger.info("✅ SbaPlayer creation process completed!")
|
||||
print(f"\n🎉 Process completed! Check the logs above for results.")
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Unexpected error: {e}")
|
||||
raise
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@ -0,0 +1,317 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Process manual review decisions and generate final assignment files.
|
||||
"""
|
||||
|
||||
import json
|
||||
import csv
|
||||
import logging
|
||||
from pathlib import Path
|
||||
from typing import Dict, List, Set
|
||||
from dataclasses import dataclass
|
||||
|
||||
# Set up logging
|
||||
logging.basicConfig(
|
||||
level=logging.INFO,
|
||||
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
|
||||
handlers=[
|
||||
logging.FileHandler('matching.log'),
|
||||
logging.StreamHandler()
|
||||
]
|
||||
)
|
||||
logger = logging.getLogger(f'{__name__}.process_manual_decisions')
|
||||
|
||||
@dataclass
|
||||
class ManualDecision:
|
||||
"""Manual decision from review CSV"""
|
||||
group_key: str
|
||||
player_name: str
|
||||
bbref_id: str
|
||||
seasons_appeared: str
|
||||
sample_player_ids: str
|
||||
potential_existing_sbaplayer_id: str
|
||||
potential_existing_sbaplayer_name: str
|
||||
potential_match_reason: str
|
||||
your_decision_sbaplayer_id: str
|
||||
your_decision_notes: str
|
||||
|
||||
def load_cached_data():
|
||||
"""Load cached player and sbaplayer data"""
|
||||
logger.info("Loading cached data from /tmp/...")
|
||||
|
||||
# Load SbaPlayers
|
||||
with open('/tmp/sbaplayers.json', 'r') as f:
|
||||
sbaplayers = json.load(f)
|
||||
logger.info(f"Loaded {len(sbaplayers)} SbaPlayer records")
|
||||
|
||||
# Load all players
|
||||
all_players = []
|
||||
for season in range(1, 13):
|
||||
try:
|
||||
with open(f'/tmp/players_season_{season}.json', 'r') as f:
|
||||
season_players = json.load(f)
|
||||
all_players.extend(season_players)
|
||||
except FileNotFoundError:
|
||||
logger.warning(f"Season {season} data not found")
|
||||
|
||||
logger.info(f"Loaded {len(all_players)} total player records")
|
||||
return all_players, sbaplayers
|
||||
|
||||
def load_previous_matches():
|
||||
"""Load the automatically matched players from comprehensive analysis"""
|
||||
matched_players = set()
|
||||
|
||||
# Read the matching report to get previously matched player IDs
|
||||
try:
|
||||
with open('matching_report.txt', 'r') as f:
|
||||
content = f.read()
|
||||
|
||||
# Extract matched player IDs from the report
|
||||
# This is a simplified approach - in practice, we'd want to re-run
|
||||
# the matching logic or save the matched IDs separately
|
||||
logger.info("Loading previously matched players from existing analysis...")
|
||||
|
||||
except FileNotFoundError:
|
||||
logger.warning("matching_report.txt not found - will need to re-run comprehensive matching")
|
||||
|
||||
return matched_players
|
||||
|
||||
def parse_manual_decisions():
|
||||
"""Parse manual decisions from the review CSV"""
|
||||
decisions = []
|
||||
|
||||
with open('new_sbaplayers_for_review.csv', 'r', encoding='utf-8') as f:
|
||||
# Handle the encoded format
|
||||
content = f.read()
|
||||
# Decode common HTML entities
|
||||
content = content.replace('+AF8-', '_')
|
||||
content = content.replace('+ACI-', '"')
|
||||
content = content.replace('+AC0-', '-')
|
||||
|
||||
# Parse as CSV
|
||||
lines = content.strip().split('\n')
|
||||
reader = csv.DictReader(lines)
|
||||
|
||||
for row in reader:
|
||||
if not row.get('group_key'): # Skip empty rows
|
||||
continue
|
||||
|
||||
decision = ManualDecision(
|
||||
group_key=row['group_key'],
|
||||
player_name=row['player_name'],
|
||||
bbref_id=row['bbref_id'],
|
||||
seasons_appeared=row['seasons_appeared'],
|
||||
sample_player_ids=row['sample_player_ids'],
|
||||
potential_existing_sbaplayer_id=row['potential_existing_sbaplayer_id'],
|
||||
potential_existing_sbaplayer_name=row['potential_existing_sbaplayer_name'],
|
||||
potential_match_reason=row['potential_match_reason'],
|
||||
your_decision_sbaplayer_id=row['your_decision_sbaplayer_id'],
|
||||
your_decision_notes=row['your_decision_notes']
|
||||
)
|
||||
decisions.append(decision)
|
||||
|
||||
logger.info(f"Parsed {len(decisions)} manual decisions")
|
||||
return decisions
|
||||
|
||||
def determine_final_assignments(all_players, sbaplayers, decisions):
|
||||
"""Determine final sbaplayer_id assignments for all players"""
|
||||
|
||||
# Create maps for quick lookup
|
||||
sbaplayer_map = {sp['id']: sp for sp in sbaplayers}
|
||||
|
||||
# Group decisions by type
|
||||
existing_matches = {} # player_name -> sbaplayer_id
|
||||
new_players_needed = set() # player names that need new SbaPlayer records
|
||||
three_way_matches = {} # consolidated names
|
||||
|
||||
# Process manual decisions
|
||||
for decision in decisions:
|
||||
if decision.your_decision_sbaplayer_id:
|
||||
# User chose an existing SbaPlayer
|
||||
try:
|
||||
sbaplayer_id = int(decision.your_decision_sbaplayer_id)
|
||||
existing_matches[decision.player_name] = sbaplayer_id
|
||||
logger.info(f"Manual match: {decision.player_name} -> SbaPlayer ID {sbaplayer_id}")
|
||||
except ValueError:
|
||||
logger.warning(f"Invalid SbaPlayer ID: {decision.your_decision_sbaplayer_id}")
|
||||
else:
|
||||
# User decided this needs a new SbaPlayer record
|
||||
new_players_needed.add(decision.player_name)
|
||||
|
||||
# Check for three-way matches in notes
|
||||
if "Three-way match" in decision.your_decision_notes:
|
||||
# Extract canonical name from notes
|
||||
if "use name Tom Eshelman" in decision.your_decision_notes:
|
||||
three_way_matches[decision.player_name] = "Tom Eshelman"
|
||||
|
||||
# Check for two-way matches (corrupted data)
|
||||
if "Two-way match" in decision.your_decision_notes:
|
||||
if "join with bbref_id mejiafr01" in decision.your_decision_notes:
|
||||
# This Francisco Mejia with "HALP" should join with the legitimate one
|
||||
# Find the mejiafr01 record in decisions
|
||||
for other_decision in decisions:
|
||||
if other_decision.bbref_id == "mejiafr01":
|
||||
three_way_matches[decision.player_name] = other_decision.player_name
|
||||
break
|
||||
|
||||
logger.info(f"Found {len(existing_matches)} existing matches")
|
||||
logger.info(f"Found {len(new_players_needed)} players needing new records")
|
||||
logger.info(f"Found {len(three_way_matches)} three-way matches")
|
||||
|
||||
return existing_matches, new_players_needed, three_way_matches
|
||||
|
||||
def generate_assignment_files(all_players, existing_matches, new_players_needed, three_way_matches):
|
||||
"""Generate the final assignment files"""
|
||||
|
||||
# We need to re-implement the comprehensive matching logic here
|
||||
# For now, I'll create a simplified version that processes the manual decisions
|
||||
|
||||
logger.info("Generating assignment files...")
|
||||
|
||||
# This is a placeholder - we need to integrate with the existing comprehensive_player_matching.py
|
||||
# logic to get the full 12,232 player assignments
|
||||
|
||||
assignments = []
|
||||
new_sbaplayers = []
|
||||
|
||||
# Process manual decisions into assignments
|
||||
for player_name, sbaplayer_id in existing_matches.items():
|
||||
# Find all player records with this name and assign them
|
||||
matching_players = [p for p in all_players if p['name'] == player_name]
|
||||
for player in matching_players:
|
||||
assignments.append({
|
||||
'player_id': player['id'],
|
||||
'player_name': player['name'],
|
||||
'season': player['season'],
|
||||
'bbref_id': player.get('bbref_id', ''),
|
||||
'assigned_sbaplayer_id': sbaplayer_id,
|
||||
'match_type': 'manual_existing'
|
||||
})
|
||||
|
||||
# Process new players that need SbaPlayer records
|
||||
next_sbaplayer_id = max([sp['id'] for sp in sbaplayers]) + 1
|
||||
|
||||
for player_name in new_players_needed:
|
||||
if player_name not in three_way_matches: # Regular new player
|
||||
# Find a representative player record to get bbref_id and other data
|
||||
sample_players = [p for p in all_players if p['name'] == player_name]
|
||||
if sample_players:
|
||||
sample = sample_players[0]
|
||||
new_sbaplayers.append({
|
||||
'new_id': next_sbaplayer_id,
|
||||
'name': player_name,
|
||||
'key_bbref': sample.get('bbref_id', ''),
|
||||
'key_fangraphs': '',
|
||||
'key_mlb': '',
|
||||
'notes': f'Created from manual review for {len(sample_players)} player records'
|
||||
})
|
||||
|
||||
# Assign all players with this name to the new SbaPlayer
|
||||
for player in sample_players:
|
||||
assignments.append({
|
||||
'player_id': player['id'],
|
||||
'player_name': player['name'],
|
||||
'season': player['season'],
|
||||
'bbref_id': player.get('bbref_id', ''),
|
||||
'assigned_sbaplayer_id': next_sbaplayer_id,
|
||||
'match_type': 'manual_new'
|
||||
})
|
||||
|
||||
next_sbaplayer_id += 1
|
||||
|
||||
# Handle three-way matches
|
||||
for original_name, canonical_name in three_way_matches.items():
|
||||
# All variations should map to the same new SbaPlayer
|
||||
all_variations = [name for name in new_players_needed if three_way_matches.get(name) == canonical_name] + [canonical_name]
|
||||
all_variations = list(set(all_variations)) # Remove duplicates
|
||||
|
||||
# Create one new SbaPlayer for all variations
|
||||
sample_players = []
|
||||
for variation in all_variations:
|
||||
sample_players.extend([p for p in all_players if p['name'] == variation])
|
||||
|
||||
if sample_players:
|
||||
sample = sample_players[0]
|
||||
new_sbaplayers.append({
|
||||
'new_id': next_sbaplayer_id,
|
||||
'name': canonical_name,
|
||||
'key_bbref': sample.get('bbref_id', ''),
|
||||
'key_fangraphs': '',
|
||||
'key_mlb': '',
|
||||
'notes': f'Consolidated from {len(all_variations)} name variations: {", ".join(all_variations)}'
|
||||
})
|
||||
|
||||
# Assign all players with these name variations
|
||||
for player in sample_players:
|
||||
assignments.append({
|
||||
'player_id': player['id'],
|
||||
'player_name': player['name'],
|
||||
'season': player['season'],
|
||||
'bbref_id': player.get('bbref_id', ''),
|
||||
'assigned_sbaplayer_id': next_sbaplayer_id,
|
||||
'match_type': 'manual_consolidated'
|
||||
})
|
||||
|
||||
next_sbaplayer_id += 1
|
||||
|
||||
return assignments, new_sbaplayers
|
||||
|
||||
def save_assignment_files(assignments, new_sbaplayers):
|
||||
"""Save the final assignment files"""
|
||||
|
||||
# Save player assignments
|
||||
with open('player_sbaplayer_assignments.csv', 'w', newline='') as f:
|
||||
if assignments:
|
||||
fieldnames = assignments[0].keys()
|
||||
writer = csv.DictWriter(f, fieldnames=fieldnames)
|
||||
writer.writeheader()
|
||||
writer.writerows(assignments)
|
||||
|
||||
logger.info(f"Saved {len(assignments)} player assignments to player_sbaplayer_assignments.csv")
|
||||
|
||||
# Save new SbaPlayers to insert
|
||||
with open('new_sbaplayers_to_insert.csv', 'w', newline='') as f:
|
||||
if new_sbaplayers:
|
||||
fieldnames = new_sbaplayers[0].keys()
|
||||
writer = csv.DictWriter(f, fieldnames=fieldnames)
|
||||
writer.writeheader()
|
||||
writer.writerows(new_sbaplayers)
|
||||
|
||||
logger.info(f"Saved {len(new_sbaplayers)} new SbaPlayer records to new_sbaplayers_to_insert.csv")
|
||||
|
||||
def main():
|
||||
"""Main processing function"""
|
||||
logger.info("Starting manual decision processing...")
|
||||
|
||||
try:
|
||||
# Load cached data
|
||||
all_players, sbaplayers = load_cached_data()
|
||||
|
||||
# Parse manual decisions
|
||||
decisions = parse_manual_decisions()
|
||||
|
||||
# Determine final assignments
|
||||
existing_matches, new_players_needed, three_way_matches = determine_final_assignments(
|
||||
all_players, sbaplayers, decisions
|
||||
)
|
||||
|
||||
# Generate assignment files
|
||||
assignments, new_sbaplayers = generate_assignment_files(
|
||||
all_players, existing_matches, new_players_needed, three_way_matches
|
||||
)
|
||||
|
||||
# Save files
|
||||
save_assignment_files(assignments, new_sbaplayers)
|
||||
|
||||
logger.info("Manual decision processing completed successfully!")
|
||||
print(f"\nSUMMARY:")
|
||||
print(f"- {len(assignments)} player assignments generated")
|
||||
print(f"- {len(new_sbaplayers)} new SbaPlayer records to create")
|
||||
print(f"- Files saved: player_sbaplayer_assignments.csv, new_sbaplayers_to_insert.csv")
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Error processing manual decisions: {e}")
|
||||
raise
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
File diff suppressed because one or more lines are too long
@ -0,0 +1,70 @@
|
||||
-- Verification queries
|
||||
-- Check sample assignments were applied correctly
|
||||
|
||||
-- Check player 2014
|
||||
SELECT id, name, sbaplayer_id
|
||||
FROM player
|
||||
WHERE id = 2014 AND sbaplayer_id = 1336;
|
||||
|
||||
-- Check player 2013
|
||||
SELECT id, name, sbaplayer_id
|
||||
FROM player
|
||||
WHERE id = 2013 AND sbaplayer_id = 570;
|
||||
|
||||
-- Check player 2015
|
||||
SELECT id, name, sbaplayer_id
|
||||
FROM player
|
||||
WHERE id = 2015 AND sbaplayer_id = 1571;
|
||||
|
||||
-- Check player 2016
|
||||
SELECT id, name, sbaplayer_id
|
||||
FROM player
|
||||
WHERE id = 2016 AND sbaplayer_id = 55;
|
||||
|
||||
-- Check player 2017
|
||||
SELECT id, name, sbaplayer_id
|
||||
FROM player
|
||||
WHERE id = 2017 AND sbaplayer_id = 279;
|
||||
|
||||
-- Check player 2018
|
||||
SELECT id, name, sbaplayer_id
|
||||
FROM player
|
||||
WHERE id = 2018 AND sbaplayer_id = 892;
|
||||
|
||||
-- Check player 2019
|
||||
SELECT id, name, sbaplayer_id
|
||||
FROM player
|
||||
WHERE id = 2019 AND sbaplayer_id = 3;
|
||||
|
||||
-- Check player 2020
|
||||
SELECT id, name, sbaplayer_id
|
||||
FROM player
|
||||
WHERE id = 2020 AND sbaplayer_id = 1433;
|
||||
|
||||
-- Check player 2021
|
||||
SELECT id, name, sbaplayer_id
|
||||
FROM player
|
||||
WHERE id = 2021 AND sbaplayer_id = 1745;
|
||||
|
||||
-- Check player 2022
|
||||
SELECT id, name, sbaplayer_id
|
||||
FROM player
|
||||
WHERE id = 2022 AND sbaplayer_id = 49;
|
||||
|
||||
|
||||
-- Summary check: Count of players with non-null sbaplayer_id
|
||||
SELECT COUNT(*) as players_with_sbaplayer_id
|
||||
FROM player
|
||||
WHERE sbaplayer_id IS NOT NULL;
|
||||
-- Expected result: should be close to 12,232
|
||||
|
||||
-- Check distribution by assignment source type
|
||||
SELECT
|
||||
CASE
|
||||
WHEN sbaplayer_id < 3000 THEN 'existing_sbaplayer'
|
||||
ELSE 'new_sbaplayer'
|
||||
END as assignment_type,
|
||||
COUNT(*) as player_count
|
||||
FROM player
|
||||
WHERE sbaplayer_id IS NOT NULL
|
||||
GROUP BY assignment_type;
|
||||
104
.claude/sqlite-to-postgres/season_batting_stats_view.sql
Normal file
104
.claude/sqlite-to-postgres/season_batting_stats_view.sql
Normal file
@ -0,0 +1,104 @@
|
||||
CREATE MATERIALIZED VIEW season_batting_stats_view AS
|
||||
WITH batting_stats AS (
|
||||
SELECT
|
||||
p.name,
|
||||
p.id AS player_id,
|
||||
p.sbaplayer_id,
|
||||
sg.season,
|
||||
p.team_id AS player_team_id,
|
||||
p.team_abbrev AS player_team_abbrev,
|
||||
|
||||
-- Counting statistics (summed from StratPlays)
|
||||
SUM(sp.pa) AS pa,
|
||||
SUM(sp.ab) AS ab,
|
||||
SUM(sp.run) AS run,
|
||||
SUM(sp.hit) AS hit,
|
||||
SUM(sp.double) AS double,
|
||||
SUM(sp.triple) AS triple,
|
||||
SUM(sp.homerun) AS hr,
|
||||
SUM(sp.rbi) AS rbi,
|
||||
SUM(sp.bb) AS bb,
|
||||
SUM(sp.so) AS so,
|
||||
SUM(sp.bphr) AS bphr,
|
||||
SUM(sp.bpfo) AS bpfo,
|
||||
SUM(sp.bp1b) AS bp1b,
|
||||
SUM(sp.bplo) AS bplo,
|
||||
SUM(sp.gidp) AS gidp,
|
||||
SUM(sp.hbp) AS hbp,
|
||||
SUM(sp.sac) AS sac,
|
||||
SUM(sp.ibb) AS ibb,
|
||||
|
||||
-- Calculated statistics using formulas
|
||||
CASE
|
||||
WHEN SUM(sp.ab) > 0
|
||||
THEN ROUND(SUM(sp.hit)::DECIMAL / SUM(sp.ab), 3)
|
||||
ELSE 0.000
|
||||
END AS avg,
|
||||
|
||||
CASE
|
||||
WHEN SUM(sp.pa) > 0
|
||||
THEN ROUND((SUM(sp.hit) + SUM(sp.bb) + SUM(sp.hbp) + SUM(sp.ibb))::DECIMAL / SUM(sp.pa), 3)
|
||||
ELSE 0.000
|
||||
END AS obp,
|
||||
|
||||
CASE
|
||||
WHEN SUM(sp.ab) > 0
|
||||
THEN ROUND((SUM(sp.hit) + SUM(sp.double) + 2 * SUM(sp.triple) + 3 *
|
||||
SUM(sp.homerun))::DECIMAL / SUM(sp.ab), 3)
|
||||
ELSE 0.000
|
||||
END AS slg,
|
||||
|
||||
CASE
|
||||
WHEN SUM(sp.pa) > 0 AND SUM(sp.ab) > 0
|
||||
THEN ROUND(
|
||||
((SUM(sp.hit) + SUM(sp.bb) + SUM(sp.hbp) + SUM(sp.ibb))::DECIMAL / SUM(sp.pa)) +
|
||||
((SUM(sp.hit) + SUM(sp.double) + 2 * SUM(sp.triple) + 3 *
|
||||
SUM(sp.homerun))::DECIMAL / SUM(sp.ab)), 3)
|
||||
ELSE 0.000
|
||||
END AS ops,
|
||||
|
||||
-- wOBA calculation (simplified version - adjust weights as needed)
|
||||
CASE
|
||||
WHEN SUM(sp.pa) > 0
|
||||
THEN ROUND((0.690 * SUM(sp.bb) + 0.722 * SUM(sp.hbp) + 0.888 * (SUM(sp.hit) -
|
||||
SUM(sp.double) - SUM(sp.triple) - SUM(sp.homerun)) +
|
||||
1.271 * SUM(sp.double) + 1.616 * SUM(sp.triple) + 2.101 *
|
||||
SUM(sp.homerun))::DECIMAL / SUM(sp.pa), 3)
|
||||
ELSE 0.000
|
||||
END AS woba,
|
||||
|
||||
CASE
|
||||
WHEN SUM(sp.pa) > 0
|
||||
THEN ROUND(SUM(sp.so)::DECIMAL / SUM(sp.pa) * 100, 1)
|
||||
ELSE 0.0
|
||||
END AS k_pct
|
||||
|
||||
FROM stratplay sp
|
||||
JOIN stratgame sg ON sg.id = sp.game_id
|
||||
JOIN player p ON p.id = sp.batter_id
|
||||
GROUP BY p.id, sg.season
|
||||
),
|
||||
running_stats AS (
|
||||
SELECT
|
||||
sp.runner_id AS player_id,
|
||||
sg.season,
|
||||
SUM(sp.sb) AS sb,
|
||||
SUM(sp.cs) AS cs
|
||||
FROM stratplay sp
|
||||
JOIN stratgame sg ON sg.id = sp.game_id
|
||||
WHERE sp.runner_id IS NOT NULL
|
||||
GROUP BY sp.runner_id, sg.season
|
||||
)
|
||||
SELECT
|
||||
bs.*,
|
||||
COALESCE(rs.sb, 0) AS sb,
|
||||
COALESCE(rs.cs, 0) AS cs
|
||||
FROM batting_stats bs
|
||||
LEFT JOIN running_stats rs ON bs.player_id = rs.player_id
|
||||
AND bs.season = rs.season;
|
||||
|
||||
-- Create indexes for better query performance
|
||||
CREATE INDEX idx_season_batting_stats_season ON season_batting_stats_view (season);
|
||||
CREATE INDEX idx_season_batting_stats_teamseason ON season_batting_stats_view (season, player_team_id);
|
||||
CREATE INDEX idx_season_batting_stats_player ON season_batting_stats_view (player_id);
|
||||
CREATE INDEX idx_season_batting_stats_sbaplayer ON season_batting_stats_view (sbaplayer_id);
|
||||
Loading…
Reference in New Issue
Block a user