Kyle Tucker will likely never spend another minute in the Carolina League (or either of the Carolinas, unless he has a nice vacation in Myrtle Beach or something like that), having been promoted to Corpus yesterday, but we need to take a moment and appreciate what he did while he was there.
Let's keep in mind that one of the reasons the Astros moved their High-A affiliate was because (a) distance, and (b) environment. Distance is a factor because the Astros' Single-A affiliate is, yes, in Iowa, but they also have lower-level affiliates in New York and eastern Tennessee, as well as the GCL affiliate in Florida. It's easier to move players around when the affiliates are relatively close together. In other words, not many players are going to jump from Lancaster (California League) to Fresno (Triple-A). The environment is key because hitting in the California League - not just in Lancaster, though that was a factor - is inflated due to the parks, and the elevation of the parks, they play in.
Consider the slash line of the entire California League in 2016: .263/.333/.405. The average ERA was 4.35 with a 1.38 WHIP. 1197 home runs were hit in 1400 games - 0.855 per game. In 2016, the Carolina League hit .258/.333/.385. Pitchers in the Carolina League put up a 4.07 ERA/1.39 WHIP with 677 home runs hit in 1112 games - 0.608 per game. So that's not as dramatic as I expected, but the Carolina League is a harder place to hit.
So Kyle Tucker's .288/.379/.554 line is more impressive. His .932 OPS was the 2nd-highest for a 20-year old in the Carolina League at the time of his promotion. Baltimore's Ryan Mountcastle is kind of screwing up my point here, but he's hitting .332/.361/.592, but he also has seven walks in 208 plate appearances, while Tucker had 24 walks in 206 plate appearances. Tucker's .932 OPS was 5th in the Carolina League among qualified batters.
(As an aside, 21-year old Michael Chavis is hitting .357/.435/.695 with 14 doubles, 12 homers, and 17 walks. That's insane.)
So let's take a look back at Age-20 seasons in the Carolina League and see where Tucker stacks up:
2016: Only one player in the entire league had a .932+ OPS - 25-year old former Astros minor-leaguer Telvin Nash.
2015: 20-year old Dorssys Paulino (Cleveland) led the Carolina League with an .897 OPS.
2014: An Age-20 Joey Gallo hit .323/.463/.735 in 58 games to lead the Carolina League. Only one other player had an OPS over .932 - 25-year old Michael Burgess (who played in 98 games for Corpus in 2013).
2013: Mookie Betts hit .341/.414/.551 in 51 games at Age-20.
2012: Six players had an OPS over .932 - all in their Age-22 or older seasons. Xander Bogaerts, then in his Age-19 season, led the Age-20 (or younger) set with an .898 OPS, 10th-best in the Carolina League.
2011: Age-20 Juan Silverio led that group, 26th-best, with a .764 OPS.
2010: A red-letter year for the Age-20 Or Younger Crowd: Age-20 Eric Hosmer hit .354/.429/.545 (2nd in the league), while Age-19 Wil Myers came in 3rd with a .346/.453/.512 slash line.
2009: Age-19 Jason Heyward finished 2nd in the Carolina League with a .296/.369/.519 line. Age-19 Freddie Freeman hit .302/.394/.447 - an OPS 71 points lower than Tucker's 2017 season.
We can stop there, but you get the idea: in the last eight seasons, hitters in their Age-20 (or younger) season with an OPS in the neighborhood of Kyle Tucker's 2017 OPS are: Joey Gallo, Mookie Betts, Xander Bogaerts, Eric Hosmer, Wil Myers, Jason Heyward, and Freddie Freeman. Not bad company.