|
||||
|
06-26-2019, 02:17 PM | #221 |
Hall Of Famer
|
1967 MLB Award Winners
AL Tomas Reed MVP: Carter Dunn, SS, Boston Red Sox - 7.4 WAR, 123 wRC+, 11.5 ZR AL J.P. Avila Award: Aaron Bjorgo, RHP, Boston Red Sox - 7.7 WAR, 69 FIP-, 3.7 K/BB NL Tomas Reed MVP: Melvyn England, RF, Pittsburgh Pirates - 5.6 WAR, 159 wRC+, -7.6 ZR NL J.P. Avila Award: Charles Searfoss, RHP, Chicago Cubs - 6.0 WAR, 78 FIP-, 3.3 K/BB AL Rookie of the Year: Alin Leonetti, RHP, Tampa Bay Devil Rays - 3.7 WAR, 96 FIP-, 2.1 K/BB NL Rookie of the Year: Korbin Fischer, LHP, Los Angeles Dodgers - 4.8 WAR, 81 FIP-, 2.6 K/BB |
06-26-2019, 02:19 PM | #222 |
Hall Of Famer
Join Date: Mar 2018
Location: Denver, Colorado
Posts: 4,262
|
Just as I was starting to think that there were far too many Jr.'s taking over team ownership from their deceased fathers, we get a Slick and a Pops.
Maybe juniors weren't so bad after all. I like the name Luke Walk though. |
06-26-2019, 03:14 PM | #223 |
Hall Of Famer
|
1967 Hall of Fame
Mark Perry, RHP Perry's peak was at the beginning of his career, with three 6-WAR seasons from age 23-25. He held his value well throughout the years and settled in as a 3-4 WAR starter for the Giants. In 1965, he pitched for the Padres and stayed with that team for a few years before retiring. Initial Acquisition: Drafted 37th overall in 1947 by the Giants out of Naples MLB Awards: 1 J.P. Avila Award, 1 ROY, 3 AS, 1 WS Career Stats: 3804.7 IP, 1174 BB, 2028 K, 3.68 FIP, 95 FIP-, 58.9 WAR, 58.3 JAWS David Findlay, LF Findlay is the best Scottish player in history. Mohammed Cocker previously held that distinction, but Findlay is the first Scotsman to make the Hall. Findlay's total career value is somewhere north of Justus Whitham and Blake Gribler. He had five 20 HR-20 SB seasons and came close to a 30-30 season in 1961 with 30 HR and 26 SB. Fielding was never his focus, but he was slightly above average at the beginning of his career, becoming more of a liability as he aged. Initial Acquisition: Drafted 5th overall in 1946 by the Royals out of Pendleton MLB Awards: 1 ROY, 1 Youssef Raadouni GG, 4 AS, 4 SS Career Stats: 11740 PA, 2948 H, 413 HR, 313 SB, .349 wOBA, 119 wRC+, -41.7 ZR, 54.2 WAR, 43.2 JAWS Hamilton Mendoza, LHP Mendoza's career ended just before the steps of the Hall, most likely due to his late start. Despite signing with the Orioles on his 16th birthday, he didn't pitch a full season in the majors until he was 25. His 27-30 year-old seasons were dominant and he put up 6-7 WAR each year. Initial Acquisition: Signed in 1945 with the Orioles out of the Dominican Republic MLB Awards: 1 ROY, 5 AS Career Stats: 2640.7 IP, 617 BB, 1882 K, 3.47 FIP, 87 FIP-, 53.4 WAR, 49.2 JAWS |
06-26-2019, 03:26 PM | #224 |
Hall Of Famer
|
1968 Top 100 Prospects
We're still in a pitcher-dominated era. R.J. Camacho is up front this year. He was a scouting discovery out of the DR in 1963 for the Red Sox and while his changeup will probably never work out, he does have a forkball to help him as a starter. The top hitter is Tommy Jones, a 12th overall selection in 1967. He is an above-average CF with the stereotypical leadoff qualities. |
06-26-2019, 04:38 PM | #225 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Hall Of Famer
|
1968 NCAA All-Stars
Team 1:
Team 2:
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
06-26-2019, 05:07 PM | #226 |
Hall Of Famer
|
1968 College Playoffs
NC State wins their first National Championship.
|
06-26-2019, 05:19 PM | #227 |
Hall Of Famer
|
Achievements, April/May 1968
MLB Owner Changes:
MLB Career Milestones: Meredith Applewhite, Texas Rangers - 2000 H No-Hitters/Perfect Games: Stuart Johnson, Suffern, NYSPHSAA - 9K, 3BB Tristan Aguado, Carolina, A+ - 12K, 4BB Mauricio Rojas, Seattle, MLB - 7K, 1BB Oliver Espinoza, Peoria, A - 4K, 6BB Kieran Long, Rice, NCAA - 13K, 2BB Rowdy Contador, Lakeland, A+ - 7K, 1BB Jeronimo Quiroz, Cape Fear, A - 8K, 2BB V.J. Hewitt, Akron, AA - 6K, 3BB Clancy Beno, Arizona State, NCAA - 10K, 1BB Leif Seith, Texas Tech, NCAA - 6K, 1BB Eric Hughes, Clinton, A - 6K, 0BB - PERFECT GAME Armando Vasquez, Gwinnett, AAA - 9K, 4BB 17+ Strikeout Games: Logan Warren, Fond du Lac, WIAA - 18K Brad Perl, Evanston, IHSA - 18K Hitting Streaks Ended: Sammy Tanada, Mississippi, NCAA - 25G Shawn Mathwig, Cleveland, MLB - 28G J.D. Jackson, Baltimore, MLB - 26G Stane Ivkovic, Stanford, NCAA - 39G Paulino Espinoza, Arizona State, NCAA - 26G Parker Mizell, South Carolina, NCAA - 39G John Sugano, Delmarva, A - 27G Braxton Moseley, Cleveland, NMAA - 27G 4 HR Games: |
06-26-2019, 05:28 PM | #228 |
Hall Of Famer
|
1968 MLB Draft
Mor Pitching!!! Nolan Poulin goes first to the Tigers. The top college draftee was Hudson Goldstein for the second year in a row. He didn't sign with the Orioles last year. Ruben Zepeda was the top hitter drafted. He really doesn't have much potential except for a good eye. Round 1, Pick 1 - Detroit Tigers: SP Nolan Poulin, age 18 Round 1, Pick 2 - New York Mets: SP Hudson Goldstein, age 22 Round 1, Pick 3 - Baltimore Orioles: SP Sean Enos, age 18 Round 1, Pick 4 - Colorado Rockies: SP Jimmy Wagner, age 21 Round 1, Pick 5 - Seattle Mariners: 2B Ruben Zepeda, age 18 Round 1, Pick 6 - Texas Rangers: SP Shane Wilson, age 21 Round 1, Pick 7 - Montreal Expos: SP Jess Oates, age 22 Round 1, Pick 8 - St. Louis Cardinals: SP Alex Kuperstein, age 21 Round 1, Pick 9 - Cleveland Indians: SP Dylan Harrell, age 18 Round 1, Pick 10 - Cleveland Indians: SP Aiden Estes, age 21 Round 1, Pick 11 - Detroit Tigers: SP Milton Burgess, age 21 Round 1, Pick 12 - Atlanta Braves: 2B Henry Conrad, age 21 Round 1, Pick 13 - Toronto Blue Jays: C Jay Hutton, age 21 Round 1, Pick 14 - Cincinnati Reds: SP Hamilton Hulse, age 18 Round 1, Pick 15 - Milwaukee Brewers: SP Josue Hamilton, age 21 Round 1, Pick 16 - Philadelphia Phillies: RF Emmanuel Calderon, age 18 Round 1, Pick 17 - Houston Astros: SP Dawson Arnold, age 18 Round 1, Pick 18 - New York Yankees: 2B Hichori Tanaka, age 24 Round 1, Pick 19 - Boston Red Sox: CF Zaquan Ganasan, age 21 Round 1, Pick 20 - Oakland Athletics: SP Ronnie Craven, age 21 Round 1, Pick 21 - Pittsburgh Pirates: SP Georgi Khodotov, age 18 Round 1, Pick 22 - Baltimore Orioles: SP Dustin Sauvé, age 21 Round 1, Pick 23 - Chicago Cubs: SP Johnny Bianchi, age 21 Round 1, Pick 24 - San Diego Padres: SP Doug Tomlinson, age 21 Round 1, Pick 25 - Minnesota Twins: SP Emmanuel Eldridge, age 18 Round 1, Pick 26 - Kansas City Royals: SS Marti Ybarra, age 21 Round 1, Pick 27 - Tampa Bay Devil Rays: SP Alf Wetherbee, age 18 Round 1, Pick 28 - Florida Marlins: RF Severio Rolando, age 18 Round 1, Pick 29 - Chicago White Sox: 3B R.J. Givens, age 21 Round 1, Pick 30 - San Francisco Giants: 2B Willard Hodgins, age 21 |
06-26-2019, 05:35 PM | #229 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Hall Of Famer
|
1968 MLB All-Star Rosters
American League:
National League:
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
06-26-2019, 05:55 PM | #230 |
Hall Of Famer
|
Achievements, June through October 1968
MLB Owner Changes:
Philadelphia Phillies sold from Sam Spencer to Julian Dodd MLB Career Milestones: Alfonso Booker, St. Louis Cardinals - 2000 H Noah Sylvain, Detroit Tigers - 400 HR Alvaro Echevarria, Florida Marlins - 2000 H No-Hitters/Perfect Games: Amaurys Vasquez, Tennessee, AA - 5K, 1BB Payton Kneepkens, Hudson Valley, A- - 10K, 3BB Van Peralta, Norfolk, AAA - 8K, 3BB Bryan Blackbird, Kinston, A+ - 8K, 2BB Oliver Onufer, Billings, R - 7K, 0BB, 1ERR Uwe Price, Jacksonville, AA - 7K, 1BB Warren Pomeroy, Lansing, A - 7K, 3BB Janus Chavez, Rancho Cucamonga, A+ - 6K, 3BB Ron Taggart, Richmond, AA - 5K, 5BB 17+ Strikeout Games: Hitting Streaks Ended: Nicky Sizemore, York, ATL - 32G Rick Bright, Nashville, AAA - 30G Tommy Jones, Dunedin, R - 25G 4 HR Games: |
06-26-2019, 05:58 PM | #231 |
Hall Of Famer
|
1968 MLB Playoffs
The Orioles won their 2nd World Series. The first was in 1950. The Padres showed up for like the 20th time (actually 12th).
|
06-26-2019, 06:01 PM | #232 | |
Hall Of Famer
|
Quote:
Ha yeah, it's nice to have it switch up the names a little here and there. In their defense, both Slick and Pops were born in 1905. Luke Walk sounds...somewhat familiar... |
|
06-26-2019, 06:26 PM | #233 |
Hall Of Famer
|
1968 MLB Award Winners
AL Tomas Reed MVP: Cody Vitale, 1B, Minnesota Twins - 8.3 WAR, 147 wRC+, 24.2 ZR AL J.P. Avila Award: Jayden Grimsley, LHP, Baltimore Orioles - 6.7 WAR, 77 FIP-, 3.9 K/BB NL Tomas Reed MVP: Vito Fernandez, LF, Florida Marlins - 7.9 WAR, 165 wRC+, 9.4 ZR NL J.P. Avila Award: Omar Artiaga, LHP, Los Angeles Dodgers - 6.1 WAR, 83 FIP-, 2.0 K/BB AL Rookie of the Year: V.J. Reaux, RHP, Cleveland Indians - 3.0 WAR, 79 FIP-, 3.2 K/BB NL Rookie of the Year: Ichiyo Kano, LF, Pittsburgh Pirates - 4.3 WAR, 114 wRC+, 13.8 ZR |
06-26-2019, 08:26 PM | #234 |
Hall Of Famer
|
1968 Hall of Fame - Hitters
Hal Reveles, RF Of the three RF inducted this year, Reveles had the best career and not coincidentally was the best defender. He had a little pop and a little speed but was best known for his ability to the bat on the ball. His career value dropped significantly once he turned 34, but his 20s were good enough to put him in consideration for one of the top-10 RF of all time. Initial Acquisition: Signed in 1947 with the Pirates out of the Dominican Republic MLB Awards: 6 Youssef Raadouni GG, 5 AS, 2 SS Career Stats: 8821 PA, 2123 H, 151 HR, 157 SB, .336 wOBA, 114 wRC+, 193.8 ZR, 58.5 WAR, 49.2 JAWS Connor Hooker, RF Of the three RF, Hooker had the longest career and had the best eye. He led the league in OBP twice and had two years where he walked more than 100 times. Early in his career, he was a contact hitter but as the contact decreased, his eye increased. Once he turned 32, he signed with the Tigers who turned him into mostly a DH as his defense continued to decline. Initial Acquisition: Drafted 46th overall in 1951 by the Blue Jays out of California MLB Awards: 3 AS, 5 SS Career Stats: 9531 PA, 2360 H, 246 HR, 22 SB, .358 wOBA, 129 wRC+, -58.6 ZR, 48.3 WAR, 41.7 JAWS Rocket Cartwright, C Of the RF, Cartwright was the catcher. This era has brought about quite a few great catchers and Cartwright happens to be the first to retire. His entire career was spent with the Marlins and a few years with an above-average bat along with about a decade of great defense put him in the Hall. Initial Acquisition: Drafted 59th overall in 1950 by the Marlins out of Sheldon MLB Awards: 1 GG, 4 AS, 4 SS, 1 WS, 1 PMVP Career Stats: 6326 PA, 1669 H, 141 HR, 5 SB, .318 wOBA, 99 wRC+, 11.9 ZR, 35.2 WAR, 30.5 JAWS Donovan Greer, RF Of the RF, Greer was the slugger. He is currently tied for 4th in HR for a RF, despite limited playing time due to injuries. Greer played in 140+ games in only 8 of his 15 seasons but during that time had years where he led the league in runs, hits, home runs, RBI, slugging, OPS, and WAR. In 1960, he became the first (and still only) player to hit 50 HR in a season. Initial Acquisition: Drafted 4th overall in 1951 by the Cubs out of Tulane MLB Awards: 1 Tomas Reed MVP, 4 AS, 3 SS, 1 PMVP Career Stats: 7674 PA, 2010 H, 324 HR, 14 SB, .360 wOBA, 128 wRC+, -3.3 ZR, 45.4 WAR, 40.5 JAWS |
06-26-2019, 08:27 PM | #235 |
Hall Of Famer
|
1968 Hall of Fame - Pitchers
Jordan Berger, LHP Berger was an ace for the Twins for 8 years and continued to provide at least mid-rotation value for another 5 years. He was quite durable, starting in over 30 games in 12 of 13 years from 1954 through 1966. In 1958, he was one game away from starting 40. Through all of that time, he put up the 6th most strikeouts in a career Initial Acquisition: Drafted 7th overall in 1948 by the Cubs out of Volcano Vista Drafted 2nd overall in 1951 by the Twins out of Ohio State MLB Awards: 1 J.P. Avila Award, 6 AS, 1 WS Career Stats: 3467 IP, 1083 BB, 2346 K, 81 FIP, 3.21 FIP-, 81.9 WAR, 60.5 JAWS Peter Griffith, LHP Griffith pitched just long enough to break Finn Loconte's strikeout record by 93. He had seven years of 200+ Ks and led the league twice. All of those strikeouts came at a price though, and he had a big problem with the longball throughout his career. He started over 30 games in every year of his career besides the last and his third to last was his year with the highest WAR. Griffith was born in the Virgin Islands and in fact in the same city as Lutfu Wohlfarth, one of the best contact hitters in the dawn of the league. Wohlfarth had been retired for 15 years by the time Griffith was born, but no doubt Griffith heard stories of Wohlfarth's 2,228 hits as he grew up. Initial Acquisition: Drafted 726th overall in 1948 by the Cardinals out of Teutopolis MLB Awards: 2 J.P. Avila Award, 2 AS, 1 WS Career Stats: 3681.7 IP, 919 BB, 2921 K, 3.66 FIP, 92 FIP-, 63.1 WAR, 53.6 JAWS |
07-01-2019, 05:02 PM | #236 |
Hall Of Famer
|
Atlantic League Folds
The Independent Atlantic League is no more. There was a strange interaction between the two leagues, especially with well-established MLB players. They would sign one-year contracts with the Indy league and then that contract would get purchased by the MLB club. This led to far too many short contracts in the majors, which then made players retire before they generally would since the team was not bound to their contract in their late-30s.
Last edited by stealofhome; 07-01-2019 at 05:51 PM. |
07-01-2019, 05:48 PM | #237 |
Hall Of Famer
|
New Top 100 Prospect List
In the future I would like to do some analysis on how prospects pan out and what matters most to their development. For now, I want to start with my own ranking of the top 100 prospects each year so that I can look at the data a little differently and be able to analyze past years. OOTP doesn't output the prospect list number in the database, so if I ever want to look at this, I'll have to calculate it myself. My numbers are slightly different than the ones the game calculates, but I wasn't trying to perfectly replicate their algorithm.
I take the talent_value for each player and then weight it based on age, development, personality, position, injury proneness, and whether or not a pitcher will rely on the changeup to develop into a starter. Then I adjust the resulting value based on if the player is a pitcher or not in order to rank the hitters and pitchers together. Currently the game is creating a lot more elite pitchers than hitters based on raw talent_value, which is why the drafts and prospect lists have been dominated by pitchers. This hopefully is due to the pitching-heavy nature of the 1960s and will soon change as hitting picks back up in the 70s. I believe there is something in the OOTP top 100 algorithm that will require a hitter at the 9th spot if one doesn't show up yet, but instead of doing it that way, I have decided to adjust for hitter/pitcher more generally. Below is my raw code for calculating and creating the HTML table output for the top 100 lists and I welcome any suggestions to improving it as I'm trying to learn R. Code:
```{r Top 100 prospects} # Libraries ---- library(tidyverse) library(kableExtra) library(magick) library(magrittr) library(scales) # Load Data ---- leagues <- read_csv('~/Out of the Park Developments/OOTP Baseball 20/saved_games/OOTPLeague.lg/import_export/general/leagues.csv') players_roster_status <- read.csv.sql("~/Out of the Park Developments/OOTP Baseball 20/saved_games/OOTPLeague.lg/import_export/csv/players_roster_status.csv", sql="select player_id, league_id, mlb_service_days from file group by player_id having league_id != 0 and league_id < 117 and mlb_service_days <= 45", eol = "\n") players_career_batting_stats <- read.csv.sql("~/Out of the Park Developments/OOTP Baseball 20/saved_games/OOTPLeague.lg/import_export/csv/players_career_batting_stats.csv", sql="select player_id, sum(ab) as ab from file group by player_id, league_id, split_id having league_id = 100 and split_id = 1 and sum(ab)<=130", eol = "\n") players_career_pitching_stats <- read.csv.sql("~/Out of the Park Developments/OOTP Baseball 20/saved_games/OOTPLeague.lg/import_export/csv/players_career_pitching_stats.csv", sql="select player_id, sum(ip) as ip from file group by player_id, league_id, split_id having league_id = 100 and split_id = 1 and sum(ip)<=50", eol = "\n") players <- read.csv.sql("~/Out of the Park Developments/OOTP Baseball 20/saved_games/OOTPLeague.lg/import_export/csv/players.csv", sql="select player_id, position, role, first_name, last_name, age, height, organization_id, bats, throws, personality_work_ethic, personality_intelligence, injury_left, prone_overall, running_ratings_speed, running_ratings_stealing, running_ratings_baserunning from file group by player_id having league_id != 0 and league_id < 117", eol = "\n") players_value <- read.csv.sql("~/Out of the Park Developments/OOTP Baseball 20/saved_games/OOTPLeague.lg/import_export/csv/players_value.csv", sql="select player_id, offensive_value, offensive_value_talent, pitching_value, pitching_value_talent, overall_value, talent_value, career_value, running_value, stealing_value, ratings_value, oa, pot from file group by player_id having league_id != 0 and league_id < 117", eol = "\n") players_batting <- read.csv.sql("~/Out of the Park Developments/OOTP Baseball 20/saved_games/OOTPLeague.lg/import_export/csv/players_batting.csv", sql="select player_id, batting_ratings_overall_contact, batting_ratings_overall_gap, batting_ratings_overall_eye, batting_ratings_overall_strikeouts, batting_ratings_overall_power, batting_ratings_talent_contact, batting_ratings_talent_gap, batting_ratings_talent_eye, batting_ratings_talent_strikeouts, batting_ratings_talent_power from file group by player_id having league_id != 0 and league_id < 117", eol = "\n") players_pitching <- read.csv.sql("~/Out of the Park Developments/OOTP Baseball 20/saved_games/OOTPLeague.lg/import_export/csv/players_pitching.csv", sql="select player_id, pitching_ratings_overall_stuff, pitching_ratings_overall_control, pitching_ratings_overall_movement, pitching_ratings_talent_stuff, pitching_ratings_talent_control, pitching_ratings_talent_movement, pitching_ratings_pitches_fastball, pitching_ratings_pitches_slider, pitching_ratings_pitches_curveball, pitching_ratings_pitches_screwball, pitching_ratings_pitches_forkball, pitching_ratings_pitches_changeup, pitching_ratings_pitches_sinker, pitching_ratings_pitches_splitter, pitching_ratings_pitches_knuckleball, pitching_ratings_pitches_cutter, pitching_ratings_pitches_circlechange, pitching_ratings_pitches_knucklecurve, pitching_ratings_pitches_talent_fastball, pitching_ratings_pitches_talent_slider, pitching_ratings_pitches_talent_curveball, pitching_ratings_pitches_talent_screwball, pitching_ratings_pitches_talent_forkball, pitching_ratings_pitches_talent_changeup, pitching_ratings_pitches_talent_sinker, pitching_ratings_pitches_talent_splitter, pitching_ratings_pitches_talent_knuckleball, pitching_ratings_pitches_talent_cutter, pitching_ratings_pitches_talent_circlechange, pitching_ratings_pitches_talent_knucklecurve, pitching_ratings_misc_velocity, pitching_ratings_misc_stamina from file group by player_id having league_id != 0 and league_id < 117", eol = "\n") players_fielding <- read.csv.sql("~/Out of the Park Developments/OOTP Baseball 20/saved_games/OOTPLeague.lg/import_export/csv/players_fielding.csv", sql="select player_id, fielding_ratings_infield_range, fielding_ratings_infield_arm, fielding_ratings_turn_doubleplay, fielding_ratings_outfield_range, fielding_ratings_outfield_arm, fielding_ratings_catcher_arm, fielding_ratings_catcher_ability, fielding_ratings_infield_error, fielding_ratings_outfield_error from file group by player_id having league_id != 0 and league_id < 117", eol = "\n") velo_words <- velo_words <- read_csv("Out of the Park Developments/OOTP Baseball 20/saved_games/OOTPLeague.lg/import_export/general/velo_words.csv") skill_lookup <- read_csv("Out of the Park Developments/OOTP Baseball 20/saved_games/OOTPLeague.lg/import_export/general/skill_lookup.csv") # Build top_100 table ---- # Find which players are eligible top_100 <- list(players_roster_status, players_career_batting_stats, players_career_pitching_stats) %>% reduce(left_join, by = "player_id") %>% select(player_id, league_id) %>% # Reduce to top 100 ---- # Add in information about player and league left_join(players, by="player_id") %>% mutate_if(is.character, str_replace_all, pattern = '"', replacement='') %>% # Add in player potential and current value from hitting, fielding, and pitching list(players_value, players_batting, players_pitching, players_fielding) %>% reduce(left_join, by = "player_id") %>% mutate_if(is.numeric , replace_na, replace = 0) %>% # Add calculated fields mutate(p_def = (((fielding_ratings_infield_range - 125)/25*39.5) + ((fielding_ratings_infield_arm - 125)/25*6.5) + ((fielding_ratings_turn_doubleplay - 125)/25*3.25) + ((fielding_ratings_infield_error - 125)/25*15.75) + 308), c_def = (((fielding_ratings_catcher_ability - 125)/25*19.5) + ((fielding_ratings_catcher_arm - 125)/25*19.5) + 133), fb_def = (if_else(fielding_ratings_infield_range<=90,fielding_ratings_infield_range/3,30+(fielding_ratings_infield_range-90)*2/25) + if_else(fielding_ratings_infield_error<=90,fielding_ratings_infield_error/5,18+(fielding_ratings_infield_error-90)/25) + fielding_ratings_infield_arm/70 + fielding_ratings_turn_doubleplay/70)*(1 + (height-155)/15), sb_def = (((fielding_ratings_infield_range - 125)/25*21.5) + ((fielding_ratings_infield_arm - 125)/25*1.5) + ((fielding_ratings_turn_doubleplay - 125)/25*9) + ((fielding_ratings_infield_error - 125)/25*8.25) + 129), tb_def = (((fielding_ratings_infield_range - 125)/25*13) + ((fielding_ratings_infield_arm - 125)/25*17) + ((fielding_ratings_turn_doubleplay - 125)/25*3.25) + ((fielding_ratings_infield_error - 125)/25*7.5) + 113.5), ss_def = (((fielding_ratings_infield_range - 125)/25*25.5) + ((fielding_ratings_infield_arm - 125)/25*2) + ((fielding_ratings_turn_doubleplay - 125)/25*8) + ((fielding_ratings_infield_error - 125)/25*7.5) + 93.75), lf_def = (((fielding_ratings_outfield_range - 125)/25*29.5) + ((fielding_ratings_outfield_arm - 125)/25*5.75) + ((fielding_ratings_outfield_error - 125)/25*4) + 149), cf_def = (((fielding_ratings_outfield_range - 125)/25*43) + ((fielding_ratings_outfield_arm - 125)/25*1.75) + ((fielding_ratings_outfield_error - 125)/25*3.5) + 78), rf_def = (((fielding_ratings_outfield_range - 125)/25*25.5) + ((fielding_ratings_outfield_arm - 125)/25*11) + ((fielding_ratings_outfield_error - 125)/25*4) + 129), current_pitches = rowSums(.[47:58] > 30), pot_pitches = rowSums(.[59:70] > 30), rely_change = if_else(pot_pitches == 3 & pitching_ratings_pitches_changeup < 30 & pitching_ratings_pitches_talent_changeup > 30, "Y","N"), ideal_pos = case_when(c_def > 0 ~ "C", position == 1 & pitching_ratings_misc_stamina >=100 & pot_pitches >2 ~ "SP", position == 1 & (pitching_ratings_misc_stamina <100 | pot_pitches <3) ~ "RP", ss_def >= 100 ~ "SS", cf_def >= 100 ~ "CF", tb_def > 75 & tb_def > sb_def ~ "3B", sb_def > 75 ~ "2B", rf_def > 75 ~ "RF", lf_def > 75 & lf_def > fb_def ~ "LF", fb_def > 75 ~ "1B", TRUE ~ "DH" ), develop_adj = pmin(overall_value/talent_value,1), age_adj = min(age)/age, change_adj = ifelse(rely_change == "Y", 0, 1), person_adj = ((personality_work_ethic/max(personality_work_ethic))+ (personality_intelligence/max(personality_intelligence)))/2) %>% group_by(ideal_pos) %>% mutate(pos_adj = talent_value/max(talent_value), inj_adj = min(prone_overall)/prone_overall) %>% ungroup() # Find range of talent value tv_min <- min(top_100$talent_value) tv_max <- max(top_100$talent_value) #Adjustment by position p_adj <- top_100 %>% filter((ideal_pos == "SP"|ideal_pos == "RP")) %>% top_n(100, talent_value) %>% summarise(mean(talent_value)) %>% pull() oth_adj <- top_100 %>% filter(!(ideal_pos == "SP"|ideal_pos == "RP")) %>% top_n(100, talent_value) %>% summarise(mean(talent_value)) %>% pull() if(p_adj>oth_adj){ oth_adj <- p_adj/oth_adj p_adj <- 1 } else{ p_adj <- oth_adj/p_adj oth_adj <- 1 } # Calculate final adjusted_talent value and rescale top_100 %<>% mutate(talent_adj = 100+ 10*(develop_adj+age_adj+change_adj+person_adj+ pos_adj+inj_adj), adjusted_talent = ifelse(ideal_pos=="SP"|ideal_pos=="RP", talent_adj*talent_value*p_adj, talent_adj*talent_value*oth_adj)) %>% arrange(desc(adjusted_talent)) top_100$adjusted_talent %<>% rescale(to=c(tv_min,tv_max)) # Reduce dataframe ---- top_100 %<>% top_n(100, adjusted_talent) # Extra information ---- top_100 %<>% merge(leagues[,c("league_id", "abbr", "league_level")], by="league_id") %>% rename(league_abbr=abbr) %>% merge(teams[,c("team_id","abbr")], by.x = "organization_id", by.y = "team_id") %>% merge(velo_words, by="pitching_ratings_misc_velocity") %>% mutate(name=paste(first_name, last_name), league_level = case_when(league_level == 1 ~ "MLB", league_level == 2 ~ "AAA", league_level == 3 ~ "AA", league_level == 4 ~ "A", league_level == 5 ~ "A-", league_level == 6 ~ "R", league_level == 7 ~ "IND", league_level == 8 ~ "INT", league_level == 10 ~ "COL", league_level == 11 ~ "HS"), bats = case_when(bats == 1 ~ "R", bats == 2 ~ "L", bats == 3 ~ "S"), throws = if_else(throws == 1, "R", "L"), position = case_when(position == 1 & role == 11 ~ "SP", position == 1 & role != 11 ~ "RP", position == 2 ~ "C", position == 3 ~ "1B", position == 4 ~ "2B", position == 5 ~ "3B", position == 6 ~ "SS", position == 7 ~ "LF", position == 8 ~ "CF", position == 9 ~ "RF"), rank = rank(-adjusted_talent), def = case_when(ideal_pos == "SP" | ideal_pos == "RP" ~ p_def, ideal_pos == "C" ~ c_def, ideal_pos == "1B" ~ fb_def, ideal_pos == "2B" ~ sb_def, ideal_pos == "3B" ~ tb_def, ideal_pos == "SS" ~ ss_def, ideal_pos == "LF" ~ lf_def, ideal_pos == "CF" ~ cf_def, ideal_pos == "RF" ~ rf_def, ideal_pos == "DH" ~ pmax(c_def,fb_def,sb_def,tb_def, ss_def,lf_def,cf_def,rf_def)), player_type = if_else(ideal_pos == "SP" | ideal_pos == "RP", "P","H")) %>% arrange(desc(adjusted_talent)) current_pitch_names <- apply(top_100[which(colnames(top_100)=="pitching_ratings_pitches_fastball"):which(colnames(top_100)=="pitching_ratings_pitches_knucklecurve")], 1, function(x) paste(names(which(x >30)),collapse=", ")) top_100 <- cbind(top_100, current_pitch_names) top_100$current_pitch_names <- gsub("pitching_ratings_pitches_", "", top_100$current_pitch_names) pot_pitch_names <- apply(top_100[which(colnames(top_100)=="pitching_ratings_pitches_talent_fastball"):which(colnames(top_100)=="pitching_ratings_pitches_talent_knucklecurve")], 1, function(x) paste(names(which(x >30)),collapse=", ")) top_100 <- cbind(top_100, pot_pitch_names) top_100$pot_pitch_names <- gsub("pitching_ratings_pitches_talent_", "", top_100$pot_pitch_names) top_100$pot_pitch_names <- gsubfn("[a-z]+", list("fastball"="FB", "slider"="SL", "curveball"="CB", "screwball"="SC", "forkball"="FK", "changeup"="CH", "sinker"="SI", "splitter"="SP", "knuckleball"="KN", "cutter"="CU", "circlechange"="CC", "knucklecurve"="KC" ), top_100$pot_pitch_names) top_100$current_pitch_names <- gsubfn("[a-z]+", list("fastball"="FB", "slider"="SL", "curveball"="CB", "screwball"="SC", "forkball"="FK", "changeup"="CH", "sinker"="SI", "splitter"="SP", "knuckleball"="KN", "cutter"="CU", "circlechange"="CC", "knucklecurve"="KC"), top_100$current_pitch_names) # Create final output ---- out_top_100 <- top_100 %>% select(Rank=rank, Name=name, Team=abbr, Age=age, Current_Position=position, Ideal_Position=ideal_pos, batting_ratings_overall_contact, batting_ratings_talent_contact, batting_ratings_overall_gap, batting_ratings_talent_gap, batting_ratings_overall_power, batting_ratings_talent_power, batting_ratings_overall_eye, batting_ratings_talent_eye, batting_ratings_overall_strikeouts, batting_ratings_talent_strikeouts, pitching_ratings_overall_stuff, pitching_ratings_talent_stuff, pitching_ratings_overall_movement, pitching_ratings_talent_movement, pitching_ratings_overall_control, pitching_ratings_talent_control, running_value, def, Level=league_level, current_pitch_names, pot_pitch_names, player_type, Velocity=word, oa, pot) %>% mutate(def = as.integer(round(def, digits = 0))) # convert all of the contact/gap/etc ratings to the 20/80 scale out_top_100[7:24] <- as.data.frame(lapply(out_top_100[7:24],function(col) skill_lookup$scouting[match(col,skill_lookup$skill)])) # then color, add in the backslash view out_top_100 <- out_top_100 %>% mutate(oa = 5*round(oa/5,0), pot = 5*round(pot/5,0), batting_ratings_overall_contact = cell_spec(batting_ratings_overall_contact, "html", color = case_when( batting_ratings_overall_contact < 35 ~ "red", batting_ratings_overall_contact < 45 ~ "orange", batting_ratings_overall_contact < 55 ~ "#ffe600", batting_ratings_overall_contact < 70 ~ "green", TRUE ~ "blue" )), batting_ratings_talent_contact = cell_spec(batting_ratings_talent_contact, "html", color = case_when( batting_ratings_talent_contact < 35 ~ "red", batting_ratings_talent_contact < 45 ~ "orange", batting_ratings_talent_contact < 55 ~ "#ffe600", batting_ratings_talent_contact < 70 ~ "green", TRUE ~ "blue" )), batting_ratings_overall_gap = cell_spec(batting_ratings_overall_gap, "html", color = case_when( batting_ratings_overall_gap < 35 ~ "red", batting_ratings_overall_gap < 45 ~ "orange", batting_ratings_overall_gap < 55 ~ "#ffe600", batting_ratings_overall_gap < 70 ~ "green", TRUE ~ "blue" )), batting_ratings_talent_gap = cell_spec(batting_ratings_talent_gap, "html", color = case_when( batting_ratings_talent_gap < 35 ~ "red", batting_ratings_talent_gap < 45 ~ "orange", batting_ratings_talent_gap < 55 ~ "#ffe600", batting_ratings_talent_gap < 70 ~ "green", TRUE ~ "blue" )), batting_ratings_overall_power = cell_spec(batting_ratings_overall_power, "html", color = case_when( batting_ratings_overall_power < 35 ~ "red", batting_ratings_overall_power < 45 ~ "orange", batting_ratings_overall_power < 55 ~ "#ffe600", batting_ratings_overall_power < 70 ~ "green", TRUE ~ "blue" )), batting_ratings_talent_power = cell_spec(batting_ratings_talent_power, "html", color = case_when( batting_ratings_talent_power < 35 ~ "red", batting_ratings_talent_power < 45 ~ "orange", batting_ratings_talent_power < 55 ~ "#ffe600", batting_ratings_talent_power < 70 ~ "green", TRUE ~ "blue" )), batting_ratings_overall_eye = cell_spec(batting_ratings_overall_eye, "html", color = case_when( batting_ratings_overall_eye < 35 ~ "red", batting_ratings_overall_eye < 45 ~ "orange", batting_ratings_overall_eye < 55 ~ "#ffe600", batting_ratings_overall_eye < 70 ~ "green", TRUE ~ "blue" )), batting_ratings_talent_eye = cell_spec(batting_ratings_talent_eye, "html", color = case_when( batting_ratings_talent_eye < 35 ~ "red", batting_ratings_talent_eye < 45 ~ "orange", batting_ratings_talent_eye < 55 ~ "#ffe600", batting_ratings_talent_eye < 70 ~ "green", TRUE ~ "blue" )), batting_ratings_overall_strikeouts = cell_spec(batting_ratings_overall_strikeouts, "html", color = case_when( batting_ratings_overall_strikeouts < 35 ~ "red", batting_ratings_overall_strikeouts < 45 ~ "orange", batting_ratings_overall_strikeouts < 55 ~ "#ffe600", batting_ratings_overall_strikeouts < 70 ~ "green", TRUE ~ "blue" )), batting_ratings_talent_strikeouts = cell_spec(batting_ratings_talent_strikeouts, "html", color = case_when( batting_ratings_talent_strikeouts < 35 ~ "red", batting_ratings_talent_strikeouts < 45 ~ "orange", batting_ratings_talent_strikeouts < 55 ~ "#ffe600", batting_ratings_talent_strikeouts < 70 ~ "green", TRUE ~ "blue" )), pitching_ratings_overall_stuff = cell_spec(pitching_ratings_overall_stuff, "html", color = case_when( pitching_ratings_overall_stuff < 35 ~ "red", pitching_ratings_overall_stuff < 45 ~ "orange", pitching_ratings_overall_stuff < 55 ~ "#ffe600", pitching_ratings_overall_stuff < 70 ~ "green", TRUE ~ "blue" )), pitching_ratings_talent_stuff = cell_spec(pitching_ratings_talent_stuff, "html", color = case_when( pitching_ratings_talent_stuff < 35 ~ "red", pitching_ratings_talent_stuff < 45 ~ "orange", pitching_ratings_talent_stuff < 55 ~ "#ffe600", pitching_ratings_talent_stuff < 70 ~ "green", TRUE ~ "blue" )), pitching_ratings_overall_movement = cell_spec(pitching_ratings_overall_movement, "html", color = case_when( pitching_ratings_overall_movement < 35 ~ "red", pitching_ratings_overall_movement < 45 ~ "orange", pitching_ratings_overall_movement < 55 ~ "#ffe600", pitching_ratings_overall_movement < 70 ~ "green", TRUE ~ "blue" )), pitching_ratings_talent_movement = cell_spec(pitching_ratings_talent_movement, "html", color = case_when( pitching_ratings_talent_movement < 35 ~ "red", pitching_ratings_talent_movement < 45 ~ "orange", pitching_ratings_talent_movement < 55 ~ "#ffe600", pitching_ratings_talent_movement < 70 ~ "green", TRUE ~ "blue" )), pitching_ratings_overall_control = cell_spec(pitching_ratings_overall_control, "html", color = case_when( pitching_ratings_overall_control < 35 ~ "red", pitching_ratings_overall_control < 45 ~ "orange", pitching_ratings_overall_control < 55 ~ "#ffe600", pitching_ratings_overall_control < 70 ~ "green", TRUE ~ "blue" )), pitching_ratings_talent_control = cell_spec(pitching_ratings_talent_control, "html", color = case_when( pitching_ratings_talent_control < 35 ~ "red", pitching_ratings_talent_control < 45 ~ "orange", pitching_ratings_talent_control < 55 ~ "#ffe600", pitching_ratings_talent_control < 70 ~ "green", TRUE ~ "blue" )), running_value = cell_spec(running_value, "html", color = case_when( running_value < 35 ~ "red", running_value < 45 ~ "orange", running_value < 55 ~ "#ffe600", running_value < 70 ~ "green", TRUE ~ "blue" )), def = cell_spec(def, "html", color = case_when( def < 35 ~ "red", def < 45 ~ "orange", def < 55 ~ "#ffe600", def < 70 ~ "green", TRUE ~ "blue" )), oa = cell_spec(oa, "html", color = case_when( oa < 35 ~ "red", oa < 45 ~ "orange", oa < 55 ~ "#ffe600", oa < 70 ~ "green", TRUE ~ "blue" )), pot = cell_spec(pot, "html", color = case_when( pot < 35 ~ "red", pot < 45 ~ "orange", pot < 55 ~ "#ffe600", pot < 70 ~ "green", TRUE ~ "blue" )), contact = paste0(batting_ratings_overall_contact, "/",batting_ratings_talent_contact), gap = paste0(batting_ratings_overall_gap, "/",batting_ratings_talent_gap), power = paste0(batting_ratings_overall_power, "/",batting_ratings_talent_power), eye = paste0(batting_ratings_overall_eye, "/",batting_ratings_talent_eye), avoid_k = paste0(batting_ratings_overall_strikeouts, "/",batting_ratings_talent_strikeouts), stuff = paste0(pitching_ratings_overall_stuff, "/",pitching_ratings_talent_stuff), movement = paste0(pitching_ratings_overall_movement, "/",pitching_ratings_talent_movement), control = paste0(pitching_ratings_overall_control, "/",pitching_ratings_talent_control), oapot = paste0(oa, "/",pot)) %>% group_by(player_type) %>% group_split() out_top_100[[1]] %<>% select(Rank, Name, Team, Age, Current_Position, Ideal_Position, oapot, contact, gap, power, eye, avoid_k, running_value, def, Level) out_top_100[[2]] %<>% select(Rank, Name, Team, Age, Current_Position, Ideal_Position, oapot, stuff, movement, control, Velocity, current_pitch_names, pot_pitch_names, Level) ``` Code:
# Hitter table hitter_header <- c(15) names(hitter_header) <- c(paste(max(leagues$season_year, na.rm = TRUE), "Top Hitters")) kable(out_top_100[[1]], "html", align = rep('c', 15), col.names = c("Rank", "Name", "Team", "Age", "Current Position", "Ideal Position","OV/POT", "Contact\n(OV/POT)","Gap\n(OV/POT)", "Power\n(OV/POT)","Eye\n(OV/POT)", "Avoid K's\n(OV/POT)","Running Value", "Def","Level"), escape = FALSE, linesep = "") %>% add_header_above(header = hitter_header) %>% kable_styling("striped", full_width = FALSE, font_size = 14) %>% column_spec(2, width_min = "4.5cm") %>% column_spec(1:15, extra_css = "padding: 0px;") %>% save_kable("./OOTP/Extravaganza/Blog/top_100/hitter.png") # Pitcher table pitcher_header <- c(14) names(pitcher_header) <- c(paste(max(leagues$season_year, na.rm = TRUE), "Top Pitchers")) kable(out_top_100[[2]], "html", align = rep('c', 14), col.names = c("Rank", "Name", "Team", "Age", "Current Role", "Ideal Role","OV/POT", "Stuff\n(OV/POT)","Movement\n(OV/POT)", "Control\n(OV/POT)","Velocity","Current Pitches", "Potential Pitches","Level"),escape = FALSE, linesep = "") %>% add_header_above(header = pitcher_header) %>% kable_styling("striped", full_width = FALSE, font_size = 14) %>% column_spec(2, width_min = "4.5cm") %>% column_spec(11:13, width_min = "3.5cm") %>% column_spec(1:14, extra_css = "padding: 0px;") %>% save_kable("./OOTP/Extravaganza/Blog/top_100/pitcher.png") Last edited by stealofhome; 07-01-2019 at 07:40 PM. |
07-01-2019, 07:59 PM | #238 |
Hall Of Famer
|
1969 Top 100 Prospects
Jason Calhoun jumps into the top spot this year. His ceiling is just below that of Nolan Poulin, but Calhoun is a bit more likely to reach his. Calhoun has a four-pitch mix that is still developing. The top hitting prospect remains the same as last year but now slots in at number three overall - Tommy Jones, a CF in the Blue Jays organization. Last edited by stealofhome; 07-01-2019 at 08:03 PM. |
07-01-2019, 09:12 PM | #239 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Hall Of Famer
|
1969 NCAA All-Stars
Team 1:
Team 2:
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
07-01-2019, 11:00 PM | #240 |
Hall Of Famer
|
1969 College Playoffs
The Fighting Illini--alma mater of many MLB Hall of Famers (Jeremiah Inman, Courtnay O'Donnell, Joe Hubbard)-win their first National Championship.
|
Bookmarks |
Thread Tools | |
|
|