davidmezzetti commited on
Commit
24ffe1d
1 Parent(s): 12c5ad7

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +22 -13
app.py CHANGED
@@ -92,14 +92,18 @@ class Stats:
92
 
93
  # Get unique names
94
  names = {}
95
- rows = self.stats[["nameFirst", "nameLast", "playerID"]].drop_duplicates()
96
  for _, row in rows.iterrows():
97
  # Name key
98
  key = f"{row['nameFirst']} {row['nameLast']}"
99
- suffix = f" ({row['playerID']})" if key in names else ""
100
 
101
- # Save name key - player id pair
102
- names[f"{key}{suffix}"] = row["playerID"]
 
 
 
 
103
 
104
  return names
105
 
@@ -138,7 +142,7 @@ class Stats:
138
 
139
  if name in self.names:
140
  # Get player stats
141
- stats = self.stats[self.stats["playerID"] == self.names[name]]
142
 
143
  # Build key metrics
144
  metrics = stats[["yearID", self.metric()]]
@@ -169,7 +173,8 @@ class Stats:
169
  query = self.vector(row)
170
  else:
171
  # Lookup player key and build vector id
172
- query = f"{year}{self.names.get(name)}"
 
173
  query = self.vectors.get(query)
174
 
175
  results, ids = [], set()
@@ -254,7 +259,7 @@ class Batting(Stats):
254
  batting = pd.merge(players, batting, how="inner", on=["playerID"])
255
 
256
  # Require player to have at least 350 plate appearances.
257
- batting = batting[(batting["AB"] + batting["BB"]) >= 350]
258
 
259
  # Derive primary player positions
260
  positions = self.positions(fielding)
@@ -387,7 +392,7 @@ class Pitching(Stats):
387
  pitching = pd.merge(players, pitching, how="inner", on=["playerID"])
388
 
389
  # Require player to have 20 appearances
390
- pitching = pitching[pitching["G"] >= 20]
391
 
392
  # Calculated columns
393
  pitching["age"] = pitching["yearID"] - pitching["birthYear"]
@@ -435,6 +440,8 @@ class Application:
435
  """
436
  )
437
 
 
 
438
  self.player()
439
 
440
  def player(self):
@@ -452,8 +459,7 @@ class Application:
452
  stats = self.batting if category == "Batting" else self.pitching
453
 
454
  # Player name
455
- names = sorted(stats.names)
456
- name = self.name(names, params.get("name"))
457
 
458
  # Player metrics
459
  active, best, metrics = stats.metrics(name)
@@ -470,7 +476,7 @@ class Application:
470
 
471
  # Display results
472
  self.table(results, ["nameFirst", "nameLast", "teamID"] + stats.columns[1:] + ["link"])
473
-
474
  # Save parameters
475
  st.experimental_set_query_params(category=category, name=name, year=year)
476
 
@@ -528,8 +534,11 @@ class Application:
528
  name component
529
  """
530
 
531
- # Get name parameter, default to random value if not valid
532
- name = name if name and name in names else random.choice(names)
 
 
 
533
 
534
  # Select box component
535
  return st.selectbox("Name", names, names.index(name), key="name")
 
92
 
93
  # Get unique names
94
  names = {}
95
+ rows = self.stats[["nameFirst", "nameLast", "playerID"]]
96
  for _, row in rows.iterrows():
97
  # Name key
98
  key = f"{row['nameFirst']} {row['nameLast']}"
99
+ key += f" ({row['playerID']})" if key in names and names[key][0] != row["playerID"] else ""
100
 
101
+ if key not in names:
102
+ # Get count of active seasons for player
103
+ count = len(rows[rows["playerID"] == row["playerID"]])
104
+
105
+ # Save name key - values pair
106
+ names[key] = (row["playerID"], count)
107
 
108
  return names
109
 
 
142
 
143
  if name in self.names:
144
  # Get player stats
145
+ stats = self.stats[self.stats["playerID"] == self.names[name][0]]
146
 
147
  # Build key metrics
148
  metrics = stats[["yearID", self.metric()]]
 
173
  query = self.vector(row)
174
  else:
175
  # Lookup player key and build vector id
176
+ name = self.names.get(name)
177
+ query = f"{year}{name[0] if name else name}"
178
  query = self.vectors.get(query)
179
 
180
  results, ids = [], set()
 
259
  batting = pd.merge(players, batting, how="inner", on=["playerID"])
260
 
261
  # Require player to have at least 350 plate appearances.
262
+ batting = batting[((batting["AB"] + batting["BB"]) >= 350) & (batting["stint"] == 1)]
263
 
264
  # Derive primary player positions
265
  positions = self.positions(fielding)
 
392
  pitching = pd.merge(players, pitching, how="inner", on=["playerID"])
393
 
394
  # Require player to have 20 appearances
395
+ pitching = pitching[(pitching["G"] >= 20) & (pitching["stint"] == 1)]
396
 
397
  # Calculated columns
398
  pitching["age"] = pitching["yearID"] - pitching["birthYear"]
 
440
  """
441
  )
442
 
443
+ player, search = st.tabs(["Player", "Search"])
444
+
445
  self.player()
446
 
447
  def player(self):
 
459
  stats = self.batting if category == "Batting" else self.pitching
460
 
461
  # Player name
462
+ name = self.name(stats.names, params.get("name"))
 
463
 
464
  # Player metrics
465
  active, best, metrics = stats.metrics(name)
 
476
 
477
  # Display results
478
  self.table(results, ["nameFirst", "nameLast", "teamID"] + stats.columns[1:] + ["link"])
479
+
480
  # Save parameters
481
  st.experimental_set_query_params(category=category, name=name, year=year)
482
 
 
534
  name component
535
  """
536
 
537
+ # Get name parameter, default to random weighted value if not valid
538
+ name = name if name and name in names else random.choices(list(names.keys()), weights=[names[x][1] for x in names])[0]
539
+
540
+ # Sort names for display
541
+ names = sorted(names)
542
 
543
  # Select box component
544
  return st.selectbox("Name", names, names.index(name), key="name")