<p><div><div><div><div data-show-faces="false" data-height="21" data-width="100" data-layout="button_count" data-send="true" data-href="https://www.r-bloggers.com/recreating-the-nba-lead-tracker-graphic/"></div></div><div></div></div><div></div></div>
<div>
(This article was first published on <strong><a href="https://statisticaloddsandends.wordpress.com/2018/12/13/recreating-the-nba-lead-tracker-graphic/"> R – Statistical Odds &amp; Ends</a></strong>, and kindly contributed to <a rel="nofollow" href="https://www.r-bloggers.com/">R-bloggers)</a> </div>
<p>For each NBA game, nba.com has a really nice graphic which tracks the point differential between the two teams throughout the game. Here is the lead tracker graphic for the game between the LA Clippers and the Phoenix Suns on 10 Dec 2018:</p>
<div data-shortcode="caption" class="wp-caption"><img data-orig-file="https://statisticaloddsandends.files.wordpress.com/2018/12/nba-lead-tracker-LAC-PHX-2018-12-10.png?w=450&amp;h=256&amp;fit=584%2C256" data-orig-size="1007,441" data-medium-file="https://statisticaloddsandends.files.wordpress.com/2018/12/nba-lead-tracker-LAC-PHX-2018-12-10.png?w=450&amp;h=256&amp;fit=584%2C256?w=300" data-attachment-id="703" data-image-meta="{" data-image-description="" src="https://statisticaloddsandends.files.wordpress.com/2018/12/nba-lead-tracker-LAC-PHX-2018-12-10.png?w=450&h=256&fit=584%2C256" data-permalink="https://statisticaloddsandends.wordpress.com/2018/12/13/recreating-the-nba-lead-tracker-graphic/nba-lead-tracker-lac-phx-2018-12-10/" data-large-file="https://statisticaloddsandends.files.wordpress.com/2018/12/nba-lead-tracker-LAC-PHX-2018-12-10.png?w=450&amp;h=256&amp;fit=584%2C256?w=584" alt="" data-image-title="nba lead tracker LAC-PHX 2018-12-10" sizes="(max-width: 584px) 100vw, 584px" data-comments-opened="1" class="wp-image-703" data-recalc-dims="1">
<p class="wp-caption-text">Taken from <a rel="nofollow" href="https://www.nba.com/games/20181210/LACPHX#/matchup" target="_blank">https://www.nba.com/games/20181210/LACPHX#/matchup</a></p>
</div>
<p>I thought it would be cool to try recreating this graphic with R. You might ask: why try to replicate something that exists already? If we are able to pull out the data underlying this graphic, we could do much more than just replicate what is already out there; we have the power to make other visualizations which could be more informative or powerful. (For example, how does this chart look like for all games that the Golden State Warriors played in? Or, how does the chart look like for each quarter of the game?)</p>
<p>The full R code for this post can be found <a rel="nofollow" href="https://github.com/kjytay/misc/blob/master/blog/2018-12-12_nba_play_by_play.R" target="_blank">here</a>. For a self-contained script that accepts a game ID parameter and produces the lead tracker graphic, click <a rel="nofollow" href="https://github.com/kjytay/misc/blob/master/blog/nba_play_by_play_single_game.R" target="_blank">here</a>.</p>
<p>First, we load the packages that we will use:</p>
<pre>
library(lubridate)
library(rvest)
library(stringr)
library(tidyverse)
</pre>
<p>We can get play-by-play data from <a rel="nofollow" href="https://www.basketball-reference.com/" target="_blank">Basketball-Reference.com</a> (<a rel="nofollow" href="https://www.basketball-reference.com/boxscores/pbp/201812100PHO.html" target="_blank">here</a> is the link for the LAC @ PHX game on 2018-12-10). Here is a snippet of the play-by-play table on that webpage, we would like to extract the columns in red:</p>
<div data-shortcode="caption" class="wp-caption"><img alt="" src="https://statisticaloddsandends.files.wordpress.com/2018/12/basketball-reference-1-2.png?w=450&h=299&fit=584%2C299" class="wp-image-708" data-recalc-dims="1">
<p class="wp-caption-text">Play-by-play data from basketball-reference.com.</p>
</div>
<p>The code below extracts the webpage, then pulls out rows from the play-by-play table:</p>
<pre>
# get webpage
url &lt;- paste0(&quot;https://www.basketball-reference.com/boxscores/pbp/&quot;, current_id,
              &quot;.html&quot;)
webpage &lt;- read_html(url)

# pull out the events from the play-by-play table
events &lt;- webpage %>% 
    html_nodes(&quot;#pbp&quot;) %>%
    html_nodes(&quot;tr&quot;) %>% 
    html_text()
</pre>
<p><code>events</code> is a character vector that looks like this:<br>
<img alt="" src="https://statisticaloddsandends.files.wordpress.com/2018/12/events-1.png?w=450&h=225&fit=584%2C225" class="wp-image-709" data-recalc-dims="1"><br>
We would really like to pull out the data in the boxes above. Timings are easy enough to pull out with regular expressions (e.g. start of the string: at least 1 digit, then :, then at least one digit, then ., then at least one digit). Pulling out the score is a bit trickier: we can’t just use the regular expression denoting a dash – with a number on each side. An example of why that doesn’t work is in the purple box above. Whenever a team scores, basketball-reference.com puts a “+2” or “+3” on the left or right of the score, depending on which team scored. In <code>events</code>, these 3 columns get smushed together into one string. If the team on the left scores, pulling out number-dash-number will give the wrong value (e.g. the purple box above would give 22-2 instead of 2-2).</p>
<p><img data-orig-file="https://statisticaloddsandends.files.wordpress.com/2018/12/basketball-reference-2.png?w=450&amp;h=299&amp;fit=584%2C299" data-orig-size="1019,522" data-medium-file="https://statisticaloddsandends.files.wordpress.com/2018/12/basketball-reference-2.png?w=450&amp;h=299&amp;fit=584%2C299?w=300" data-attachment-id="715" data-image-meta="{" data-image-description="" src="https://statisticaloddsandends.files.wordpress.com/2018/12/basketball-reference-2.png?w=450&h=299&fit=584%2C299" data-permalink="https://statisticaloddsandends.wordpress.com/2018/12/13/recreating-the-nba-lead-tracker-graphic/basketball-reference-2/" data-large-file="https://statisticaloddsandends.files.wordpress.com/2018/12/basketball-reference-2.png?w=450&amp;h=299&amp;fit=584%2C299?w=584" alt="" data-image-title="basketball-reference 2" sizes="(max-width: 584px) 100vw, 584px" data-comments-opened="1" class="wp-image-715" data-recalc-dims="1"></p>
<p>To avoid this issue, we extract the “+”s that may appear on either side of the score. In fact, this has an added advantage: we only need to extract a score if it is different from the previous timestamp. As such, we only have to keep the scores which have a “+” on either side of it. We then post-process the scores.</p>
<pre>
# get event times &amp; scores
times  &lt;- str_extract(events, &quot;^\\d+:\\d+.\\d+&quot;)
scores &lt;- str_extract(events, &quot;[\\+]*\\d+-\\d+[\\+]*&quot;)
scores &lt;- ifelse(str_detect(scores, &quot;\\+&quot;), scores, NA)

df &lt;- data.frame(time = times, score = scores, stringsAsFactors = FALSE) %>%
    na.omit()

# remove the +'s
parseScore &lt;- function(x) {
    if (startsWith(x, &quot;+&quot;)) {
        return(str_sub(x, 3, str_length(x)))
    } else if (endsWith(x, &quot;+&quot;)) {
        return(str_sub(x, 1, str_length(x) - 1))
    } else {
        return(x)
    }
}
df$score &lt;- sapply(df$score, parseScore)
</pre>
<p><img data-orig-file="https://statisticaloddsandends.files.wordpress.com/2018/12/df.png?w=456" data-orig-size="250,272" data-medium-file="https://statisticaloddsandends.files.wordpress.com/2018/12/df.png?w=456?w=250" data-attachment-id="719" data-image-meta="{" data-image-description="" src="https://statisticaloddsandends.files.wordpress.com/2018/12/df.png?w=456" data-permalink="https://statisticaloddsandends.wordpress.com/2018/12/13/recreating-the-nba-lead-tracker-graphic/df/" data-large-file="https://statisticaloddsandends.files.wordpress.com/2018/12/df.png?w=456?w=250" alt="" data-image-title="df" sizes="(max-width: 250px) 100vw, 250px" data-comments-opened="1" class="wp-image-719" data-recalc-dims="1"></p>
<p>Next, we split the score into visitor and home score and compute the point differential (positive means the visitor team is winning):</p>
<pre>
# split score into visitor and home score, get home advantage
df &lt;- df %>% 
    separate(score, into = c(&quot;visitor&quot;, &quot;home&quot;), sep = &quot;-&quot;) %>%
    mutate(visitor = as.numeric(visitor), 
           home = as.numeric(home),
           time = ms(time)) %>%
    mutate(visitor_adv = visitor - home)
</pre>
<p><img data-orig-file="https://statisticaloddsandends.files.wordpress.com/2018/12/df2.png?w=456" data-orig-size="510,273" data-medium-file="https://statisticaloddsandends.files.wordpress.com/2018/12/df2.png?w=456?w=300" data-attachment-id="720" data-image-meta="{" data-image-description="" src="https://statisticaloddsandends.files.wordpress.com/2018/12/df2.png?w=456" data-permalink="https://statisticaloddsandends.wordpress.com/2018/12/13/recreating-the-nba-lead-tracker-graphic/df2/" data-large-file="https://statisticaloddsandends.files.wordpress.com/2018/12/df2.png?w=456?w=510" alt="" data-image-title="df2" sizes="(max-width: 510px) 100vw, 510px" data-comments-opened="1" class="wp-image-720" data-recalc-dims="1"></p>
<p>Next we need to process the timings. Each of the 4 quarters lasts for 12 minutes, while each overtime period (if any) lasts for 5 minutes. The <code>time</code> column shows the amount of time remaining in the current period. We will amend the times so that they show the time elapsed (in seconds) from the start of the game. This notion of time makes it easier for plotting, and works for any number of overtime periods as well.</p>
<pre>
# get period of play (e.g. Q1, Q2, ...)
df$period &lt;- NA
period &lt;- 0
prev_time &lt;- ms(&quot;0:00&quot;)
for (i in 1:nrow(df)) {
    curr_time &lt;- df[i, &quot;time&quot;]
    if (prev_time &lt; curr_time) {
        period &lt;- period + 1
    }
    df[i, &quot;period&quot;] &lt;- period
    prev_time &lt;- curr_time
}

# convert time such that it runs upwards. regular quarters are 12M long, OT 
# periods are 5M long
df &lt;- df %>% mutate(time = ifelse(period &lt;= 4, as.duration(12 * 60) - as.duration(time), as.duration(5 * 60) - as.duration(time))) %>%
    mutate(time = ifelse(period &lt;= 4,
                         time + as.duration(12 * 60 * (period - 1)),
                         time + as.duration(12 * 60 * 4) + 
                             as.duration(5 * 60 * (period - 5))
                         ))
</pre>
<p><img data-orig-file="https://statisticaloddsandends.files.wordpress.com/2018/12/df3.png?w=456" data-orig-size="570,274" data-medium-file="https://statisticaloddsandends.files.wordpress.com/2018/12/df3.png?w=456?w=300" data-attachment-id="722" data-image-meta="{" data-image-description="" src="https://statisticaloddsandends.files.wordpress.com/2018/12/df3.png?w=456" data-permalink="https://statisticaloddsandends.wordpress.com/2018/12/13/recreating-the-nba-lead-tracker-graphic/df3/" data-large-file="https://statisticaloddsandends.files.wordpress.com/2018/12/df3.png?w=456?w=570" alt="" data-image-title="df3" sizes="(max-width: 570px) 100vw, 570px" data-comments-opened="1" class="wp-image-722" data-recalc-dims="1"></p>
<p>At this point, we have enough to make crude approximations of the lead tracker graphic:</p>
<pre>
ggplot() +
    geom_line(data = df, aes(x = time, y = visitor_adv)) +
    labs(title = &quot;LAC @ PHX, 2018-12-10&quot;) +
    theme_minimal() +
    theme(plot.title = element_text(size = rel(1.5), face = &quot;bold&quot;, hjust = 0.5))
</pre>
<p><img data-orig-file="https://statisticaloddsandends.files.wordpress.com/2018/12/line_plot.png?w=450&amp;h=292&amp;fit=584%2C292" data-orig-size="600,300" data-medium-file="https://statisticaloddsandends.files.wordpress.com/2018/12/line_plot.png?w=450&amp;h=292&amp;fit=584%2C292?w=300" data-attachment-id="723" data-image-meta="{" data-image-description="" src="https://statisticaloddsandends.files.wordpress.com/2018/12/line_plot.png?w=450&h=292&fit=584%2C292" data-permalink="https://statisticaloddsandends.wordpress.com/2018/12/13/recreating-the-nba-lead-tracker-graphic/line_plot/" data-large-file="https://statisticaloddsandends.files.wordpress.com/2018/12/line_plot.png?w=450&amp;h=292&amp;fit=584%2C292?w=584" alt="" data-image-title="line_plot" sizes="(max-width: 584px) 100vw, 584px" data-comments-opened="1" class="wp-image-723" data-recalc-dims="1"></p>
<pre>
ggplot() +
    geom_step(data = df, aes(x = time, y = visitor_adv)) +
    labs(title = &quot;LAC @ PHX, 2018-12-10&quot;) +
    theme_minimal() +
    theme(plot.title = element_text(size = rel(1.5), face = &quot;bold&quot;, hjust = 0.5))
</pre>
<p><img data-orig-file="https://statisticaloddsandends.files.wordpress.com/2018/12/step_plot.png?w=450&amp;h=292&amp;fit=584%2C292" data-orig-size="600,300" data-medium-file="https://statisticaloddsandends.files.wordpress.com/2018/12/step_plot.png?w=450&amp;h=292&amp;fit=584%2C292?w=300" data-attachment-id="724" data-image-meta="{" data-image-description="" src="https://statisticaloddsandends.files.wordpress.com/2018/12/step_plot.png?w=450&h=292&fit=584%2C292" data-permalink="https://statisticaloddsandends.wordpress.com/2018/12/13/recreating-the-nba-lead-tracker-graphic/step_plot/" data-large-file="https://statisticaloddsandends.files.wordpress.com/2018/12/step_plot.png?w=450&amp;h=292&amp;fit=584%2C292?w=584" alt="" data-image-title="step_plot" sizes="(max-width: 584px) 100vw, 584px" data-comments-opened="1" class="wp-image-724" data-recalc-dims="1"></p>
<p>Getting the fill colors that NBA.com’s lead tracker has requires a bit more work. We need to split the <code>visitor_adv</code> into two columns: the visitor’s lead (0 if they are behind) and the home’s lead (0 if they are behind). We can then draw the chart above and below the x-axis as two <code>geom_ribbon</code>s. (It’s a little more complicated than that, see <a rel="nofollow" href="https://stackoverflow.com/questions/21887088/generate-a-filled-geom-step" target="_blank">this StackOverflow question</a> and <a rel="nofollow" href="https://gist.github.com/Teebusch/db0ab76d31fd31a13ccf93afa7d77df5" target="_blank">this gist</a> for details.) Colors were obtained using <a rel="nofollow" href="https://imagecolorpicker.com/" target="_blank">imagecolorpicker.com</a>.</p>
<pre>
df$visitor_lead &lt;- pmax(df$visitor_adv, 0)
df$home_lead    &lt;- pmin(df$visitor_adv, 0)

df_extraSteps &lt;- df %>% mutate(visitor_adv = lag(visitor_adv),
                               visitor_lead = lag(visitor_lead),
                               home_lead = lag(home_lead))
df2 &lt;- bind_rows(df_extraSteps, df) %>%
    arrange(time)

ggplot() +
    geom_ribbon(data = df2, aes(x = time, ymin = 0, ymax = visitor_lead), fill = &quot;#F7174E&quot;) +
    geom_ribbon(data = df2, aes(x = time, ymin = home_lead, ymax = 0), fill = &quot;#F16031&quot;) +
    labs(title = &quot;LAC @ PHX, 2018-12-10&quot;) +
    theme_minimal() +
    theme(plot.title = element_text(size = rel(1.5), face = &quot;bold&quot;, hjust = 0.5))
</pre>
<p><img data-orig-file="https://statisticaloddsandends.files.wordpress.com/2018/12/ribbon_plot_1.png?w=450&amp;h=292&amp;fit=584%2C292" data-orig-size="600,300" data-medium-file="https://statisticaloddsandends.files.wordpress.com/2018/12/ribbon_plot_1.png?w=450&amp;h=292&amp;fit=584%2C292?w=300" data-attachment-id="725" data-image-meta="{" data-image-description="" src="https://statisticaloddsandends.files.wordpress.com/2018/12/ribbon_plot_1.png?w=450&h=292&fit=584%2C292" data-permalink="https://statisticaloddsandends.wordpress.com/2018/12/13/recreating-the-nba-lead-tracker-graphic/ribbon_plot_1/" data-large-file="https://statisticaloddsandends.files.wordpress.com/2018/12/ribbon_plot_1.png?w=450&amp;h=292&amp;fit=584%2C292?w=584" alt="" data-image-title="ribbon_plot_1" sizes="(max-width: 584px) 100vw, 584px" data-comments-opened="1" class="wp-image-725" data-recalc-dims="1"></p>
<p>Almost there! The code below does some touch up to the figure, giving it the correct limits for the y-axis as well as vertical lines for the end of the periods.</p>
<pre>
# get score differential range (round to nearest 5)
ymax &lt;- round(max(df$visitor_adv) * 2, digits = -1) / 2
ymin &lt;- round(min(df$visitor_adv) * 2, digits = -1) / 2

# get period positions and labels
periods &lt;- unique(df$period)
x_value &lt;- ifelse(periods &lt;= 4, 12 * 60 * periods, 
                  12 * 60 * 4 + 5 * 60 * (periods - 4))
x_label &lt;- ifelse(periods &lt;= 4, paste0(&quot;Q&quot;, periods), 
                  paste0(&quot;OT&quot;, periods - 4))

ggplot() +
    geom_ribbon(data = df2, aes(x = time, ymin = 0, ymax = visitor_lead), fill = &quot;#F7174E&quot;) +
    geom_ribbon(data = df2, aes(x = time, ymin = home_lead, ymax = 0), fill = &quot;#F16031&quot;) +
    geom_vline(aes(xintercept = x_value), linetype = 2, col = &quot;grey&quot;) +
    scale_y_continuous(limits = c(ymin, ymax)) +
    labs(title = &quot;LAC @ PHX, 2018-12-10&quot;) +
    scale_x_continuous(breaks = x_value, labels = x_label) +
    theme_minimal() +
    theme(plot.title = element_text(size = rel(1.5), face = &quot;bold&quot;, hjust = 0.5),
          axis.title.x = element_blank(), panel.grid.minor.x = element_blank(),
          panel.grid.minor.y = element_blank())
</pre>
<p><img data-orig-file="https://statisticaloddsandends.files.wordpress.com/2018/12/ribbon_plot_2.png?w=450&amp;h=292&amp;fit=584%2C292" data-orig-size="600,300" data-medium-file="https://statisticaloddsandends.files.wordpress.com/2018/12/ribbon_plot_2.png?w=450&amp;h=292&amp;fit=584%2C292?w=300" data-attachment-id="726" data-image-meta="{" data-image-description="" src="https://statisticaloddsandends.files.wordpress.com/2018/12/ribbon_plot_2.png?w=450&h=292&fit=584%2C292" data-permalink="https://statisticaloddsandends.wordpress.com/2018/12/13/recreating-the-nba-lead-tracker-graphic/ribbon_plot_2/" data-large-file="https://statisticaloddsandends.files.wordpress.com/2018/12/ribbon_plot_2.png?w=450&amp;h=292&amp;fit=584%2C292?w=584" alt="" data-image-title="ribbon_plot_2" sizes="(max-width: 584px) 100vw, 584px" data-comments-opened="1" class="wp-image-726" data-recalc-dims="1"></p>
<p>The figure above is what we set out to plot. However, since we have the underlying data, we can now make plots of the same data that may reveal other trends (code at the end of <a rel="nofollow" href="https://github.com/kjytay/misc/blob/master/blog/2018-12-12_nba_play_by_play.R" target="_blank">this R file</a>). Here are the line and ribbon plots where we look at the absolute score rather than the point differential:</p>
<p><img data-orig-file="https://statisticaloddsandends.files.wordpress.com/2018/12/line_plot_2.png?w=450&amp;h=292&amp;fit=584%2C292" data-orig-size="600,300" data-medium-file="https://statisticaloddsandends.files.wordpress.com/2018/12/line_plot_2.png?w=450&amp;h=292&amp;fit=584%2C292?w=300" data-attachment-id="729" data-image-meta="{" data-image-description="" src="https://statisticaloddsandends.files.wordpress.com/2018/12/line_plot_2.png?w=450&h=292&fit=584%2C292" data-permalink="https://statisticaloddsandends.wordpress.com/2018/12/13/recreating-the-nba-lead-tracker-graphic/line_plot_2/" data-large-file="https://statisticaloddsandends.files.wordpress.com/2018/12/line_plot_2.png?w=450&amp;h=292&amp;fit=584%2C292?w=584" alt="" data-image-title="line_plot_2" sizes="(max-width: 584px) 100vw, 584px" data-comments-opened="1" class="wp-image-729" data-recalc-dims="1"></p>
<p><img data-orig-file="https://statisticaloddsandends.files.wordpress.com/2018/12/ribbon_plot_3.png?w=450&amp;h=292&amp;fit=584%2C292" data-orig-size="600,300" data-medium-file="https://statisticaloddsandends.files.wordpress.com/2018/12/ribbon_plot_3.png?w=450&amp;h=292&amp;fit=584%2C292?w=300" data-attachment-id="730" data-image-meta="{" data-image-description="" src="https://statisticaloddsandends.files.wordpress.com/2018/12/ribbon_plot_3.png?w=450&h=292&fit=584%2C292" data-permalink="https://statisticaloddsandends.wordpress.com/2018/12/13/recreating-the-nba-lead-tracker-graphic/ribbon_plot_3/" data-large-file="https://statisticaloddsandends.files.wordpress.com/2018/12/ribbon_plot_3.png?w=450&amp;h=292&amp;fit=584%2C292?w=584" alt="" data-image-title="ribbon_plot_3" sizes="(max-width: 584px) 100vw, 584px" data-comments-opened="1" class="wp-image-730" data-recalc-dims="1"></p>
<p>Here, we add points to the line plot to indicate whether a free throw, 2 pointer or 3 pointer was scored:</p>
<p><img data-orig-file="https://statisticaloddsandends.files.wordpress.com/2018/12/line_plot_3.png?w=450&amp;h=292&amp;fit=584%2C292" data-orig-size="600,300" data-medium-file="https://statisticaloddsandends.files.wordpress.com/2018/12/line_plot_3.png?w=450&amp;h=292&amp;fit=584%2C292?w=300" data-attachment-id="732" data-image-meta="{" data-image-description="" src="https://statisticaloddsandends.files.wordpress.com/2018/12/line_plot_3.png?w=450&h=292&fit=584%2C292" data-permalink="https://statisticaloddsandends.wordpress.com/2018/12/13/recreating-the-nba-lead-tracker-graphic/line_plot_3/" data-large-file="https://statisticaloddsandends.files.wordpress.com/2018/12/line_plot_3.png?w=450&amp;h=292&amp;fit=584%2C292?w=584" alt="" data-image-title="line_plot_3" sizes="(max-width: 584px) 100vw, 584px" data-comments-opened="1" class="wp-image-732" data-recalc-dims="1"></p>
<p>The possibilities are endless!</p>
	<p>
<div>
<div>To <strong>leave a comment</strong> for the author, please follow the link and comment on their blog: <strong><a href="https://statisticaloddsandends.wordpress.com/2018/12/13/recreating-the-nba-lead-tracker-graphic/"> R – Statistical Odds &amp; Ends</a></strong>.</div>
<hr>
<a rel="nofollow" href="https://www.r-bloggers.com/">R-bloggers.com</a> offers <strong><a rel="nofollow" href="https://feedburner.google.com/fb/a/mailverify?uri=RBloggers">daily e-mail updates</a></strong> about <a rel="nofollow" href="https://www.r-project.org/" title="The R Project for Statistical Computing">R</a> news and <a rel="nofollow" href="https://www.r-bloggers.com/search/tutorial" title="R tutorials">tutorials</a> on topics such as: <a rel="nofollow" href="https://www.r-bloggers.com/search/data%20science" title="Data science">Data science</a>, <a rel="nofollow" href="https://www.r-bloggers.com/search/Big%20Data" title="Big Data">Big Data, <a rel="nofollow" href="https://www.r-users.com/" title="R jobs">R jobs</a>, visualization (<a rel="nofollow" href="https://www.r-bloggers.com/search/ggplot2" title="ggplot and ggplot2 tutorials">ggplot2</a>, <a rel="nofollow" href="https://www.r-bloggers.com/search/boxplot" title="Boxplots using lattice and ggplot2 tutorials">Boxplots</a>, <a rel="nofollow" href="https://www.r-bloggers.com/search/map" title="Maps and gis">maps</a>, <a rel="nofollow" href="https://www.r-bloggers.com/search/animation" title="Animation in R">animation</a>), programming (<a rel="nofollow" href="https://www.r-bloggers.com/search/RStudio" title="RStudio IDE for R">RStudio</a>, <a rel="nofollow" href="https://www.r-bloggers.com/search/sweave" title="Sweave and literate programming">Sweave</a>, <a rel="nofollow" href="https://www.r-bloggers.com/search/LaTeX" title="LaTeX in R">LaTeX</a>, <a rel="nofollow" href="https://www.r-bloggers.com/search/SQL" title="SQL and databases">SQL</a>, <a rel="nofollow" href="https://www.r-bloggers.com/search/eclipse" title="Eclipse IDE for R">Eclipse</a>, <a rel="nofollow" href="https://www.r-bloggers.com/search/git" title="git and github, Version Control System">git</a>, <a rel="nofollow" href="https://www.r-bloggers.com/search/hadoop" title="Large data in R using Hadoop">hadoop</a>, <a rel="nofollow" href="https://www.r-bloggers.com/search/Web+Scraping" title="Web Scraping of google, facebook, yahoo, twitter and more using R">Web Scraping</a>) statistics (<a rel="nofollow" href="https://www.r-bloggers.com/search/regression" title="Regressions and ANOVA analysis tutorials">regression</a>, <a rel="nofollow" href="https://www.r-bloggers.com/search/PCA" title="principal component analysis tutorial">PCA</a>, <a rel="nofollow" href="https://www.r-bloggers.com/search/time+series" title="Time series">time series</a>, <a rel="nofollow" href="https://www.r-bloggers.com/search/trading" title="finance trading">trading</a>) and more...
<img alt="" width="1" src="http://feeds.feedburner.com/~r/RBloggers/~4/SFlMr7zgOP4" height="1"></a></div>