# Visualizing Baseball History using Shiny

Baseball has a fascinating history and one can quickly look at the history of the rates of different offensive events by graphing Lahman team data using the ggplot2 package. I’ll use this to illustrate the use of the RStudio ` shiny ` package — this allows one to easily write gui web interfaces for R work.

I start with a function ` baseball.history ` to graph the number of team runs scored per game against season. The inputs are the time frame (`startYear ` and `endYear`), the variable of interest (`variable`) and a parameter controlling the smoothness of a smoothing curve. Here’s the function with an example.

```baseball.history <-
function(startYear, endYear, variable, smooth.fraction=0.3){
require(Lahman)
require(ggplot2)
Teams.recent = startYear &
yearID <= endYear)
Teams.recent\$stat.game <-
Teams.recent[, variable] / Teams.recent[, "G"]
print(ggplot(Teams.recent, aes(yearID, stat.game)) +
geom_point() +
geom_smooth(size=2, color="red", method="loess",
span=smooth.fraction) +
xlab("YEAR") + ylab("RATE PER GAME PER TEAM") )
}

baseball.history(1901, 2012, "R", smooth.fraction=0.5)
```

It is interesting that run scoring has remained pretty constant throughout baseball history, although run scoring seemed to peak recently during the “Steriods Era”.

Suppose I want to construct a friendly user interface for this graph where the user can select (1) the offensive measure to graph (H, R, HR, etc), (2) the time interval to consider (maybe we want to focus on home run hitting in the modern era after 1960) and (3) the smoothness of the smooth (sometimes we want to adjust the value used in the loess smoother).

I am not a Shiny expert, but it was easy to modify one of the tutorial examples for my purpose. Here is what I did. In the working directory, create a new folder that I called ` history ` with two R files ` ui.R ` and ` server.R `. You can see these files at https://gist.github.com/bayesball/8293777 Essentially, the file ` ui.R ` defines the user interface (sliders, menus, etc), and the file ` server.R ` contains the R code to do the work.

I’ll illustrate three ways of sharing a ` shiny ` web application.  Once you have the two files `ui.R `and `server.R `created in the folder ` history ` and you have already installed the ` shiny ` package, then all you do to run this application is to enter:

```library(shiny)
runApp("history")
```

I have already shared these files on github gist.  A second way to run this application is to install the ` devtools ` package and run my code by the ` runGist ` function (I’ve added a snapshot of what you’ll see):

```library(devtools)
shiny::runGist(8293777)
```

Even easier, a third way is to visit the web application that I uploaded to the Shiny server (one needs to set up an account with RStudio):

http://bayesball.shinyapps.io/baseballhistory/

Anyway, I think Shiny looks like a very nice way to share R work, and I think I’ll be using it for some of my classes.  RStudio has good documentation for the ` shiny ` package at http://www.rstudio.com/shiny/.