<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/concatenate-embeddings-for-categorical-variables-with-keras/"></div></div><div></div></div><div></div></div>
<div>
(This article was first published on <strong><a href="http://flovv.github.io/Embeddings_with_keras_part2/"> Florian Teschner</a></strong>, and kindly contributed to <a rel="nofollow" href="https://www.r-bloggers.com/">R-bloggers)</a> </div>
<p>In my last <a rel="nofollow" href="http://flovv.github.io/Embeddings_with_keras/" target="_blank">post</a>, I explored how to use embeddings to represent categorical variables. Furthermore, I showed how to extract the embeddings weights to use them in another model.</p>
<p>While the concept of embedding representation has been used in NLP for quite some time, the idea to represent categorical variables with embeddings appreared just recently<br>
If you are interested in learning more about embddings, <a rel="nofollow" href="https://towardsdatascience.com/deep-learning-4-embedding-layers-f9a02d55ac12" target="_blank">this</a> is a good resource for the concept.<br>
The image (from quora) quickly summarises the embedding concept. Words or categorical variables are represented by a point in n or in this case 3-dimensional space. Words which are similar are grouped together in the cube at a similar place.</p>
<p><img alt="Embedding chart" src="https://i2.wp.com/flovv.github.io/figures/post29/embedding.png?w=456" data-recalc-dims="1"></p>
<p>In response to my post, I got the question of how to combine such embeddings with other variables to build a model with multiple variables.<br>
This is a good question and not straight-forward to achieve as the model structure inn Keras is slightly different from the typical sequential model.</p>
<p>As in the post before, let’s work with the nyc citi bike count data from Kaggle. It contains daily bicycle counts for major bridges in NYC.</p>
<p>In order to have a longer dataset, I use the bicycle count for all bridges as the dependent variable</p>
<figure>
<pre><code data-lang="r"><span>#https://www.kaggle.com/new-york-city/nyc-east-river-bicycle-crossings</span><span><br data-jekyll-commonmark-ghpages=""></span><span>df</span><span> </span><span>&lt;-</span><span> </span><span>read.csv</span><span>(</span><span>&quot;data/nyc-east-river-bicycle-counts.csv&quot;</span><span>)</span><span><br data-jekyll-commonmark-ghpages=""> <br data-jekyll-commonmark-ghpages=""> <br data-jekyll-commonmark-ghpages=""></span><span>dflong</span><span> </span><span>&lt;-</span><span> </span><span>data.table</span><span>::</span><span>melt</span><span>(</span><span>df</span><span>[</span><span>c</span><span>(</span><span>&quot;Date&quot;</span><span>,</span><span> </span><span>&quot;Brooklyn.Bridge&quot;</span><span>,</span><span> </span><span>&quot;Manhattan.Bridge&quot;</span><span>,</span><span> </span><span>&quot;Williamsburg.Bridge&quot;</span><span> </span><span>,</span><span>&quot;Queensboro.Bridge&quot;</span><span>)],</span><span> </span><span>idvars</span><span>=</span><span>&quot;date&quot;</span><span>)</span><span><br data-jekyll-commonmark-ghpages=""> <br data-jekyll-commonmark-ghpages=""></span><span>dflong</span><span>$</span><span>date</span><span> </span><span>&lt;-</span><span> </span><span>as.Date</span><span>(</span><span>dflong</span><span>$</span><span>Date</span><span>)</span><span><br data-jekyll-commonmark-ghpages=""></span><span>dflong</span><span>$</span><span>weekday</span><span> </span><span>&lt;-</span><span> </span><span>wday</span><span>(</span><span>dflong</span><span>$</span><span>date</span><span>)</span><span><br data-jekyll-commonmark-ghpages=""> <br data-jekyll-commonmark-ghpages=""></span><span>dflong</span><span> </span><span>&lt;-</span><span> </span><span>merge</span><span>(</span><span>dflong</span><span>,</span><span> </span><span>df</span><span>[,</span><span> </span><span>c</span><span>(</span><span>&quot;Date&quot;</span><span>,</span><span> </span><span>&quot;Precipitation&quot;</span><span>,</span><span> </span><span>&quot;Low.Temp..Â.F.&quot;</span><span>)],</span><span> </span><span>by</span><span>=</span><span>&quot;Date&quot;</span><span>)</span><span><br data-jekyll-commonmark-ghpages=""> <br data-jekyll-commonmark-ghpages=""></span><span>dflong</span><span>$</span><span>ScaledUsers</span><span> </span><span>&lt;-</span><span> </span><span>scale</span><span>(</span><span>dflong</span><span>$</span><span>value</span><span>)</span><span><br data-jekyll-commonmark-ghpages=""></span><span>dflong</span><span>$</span><span>lowTemp</span><span> </span><span>&lt;-</span><span> </span><span>scale</span><span>(</span><span>dflong</span><span>[,</span><span>&quot;Low.Temp..Â.F.&quot;</span><span>])</span><span><br data-jekyll-commonmark-ghpages=""> <br data-jekyll-commonmark-ghpages=""></span><span>dflong</span><span>$</span><span>rain</span><span> </span><span>&lt;-</span><span> </span><span>ifelse</span><span>(</span><span>dflong</span><span>$</span><span>Precipitation</span><span> </span><span>!=</span><span> </span><span>0</span><span>,</span><span> </span><span>0</span><span>,</span><span>1</span><span>)</span><span><br data-jekyll-commonmark-ghpages=""> <br data-jekyll-commonmark-ghpages=""></span><span>### important - replace string factors with numbers for Keras to work!</span><span><br data-jekyll-commonmark-ghpages=""></span><span>dflong</span><span>$</span><span>Bridge</span><span> </span><span>&lt;-</span><span> </span><span>factor</span><span>(</span><span>dflong</span><span>$</span><span>variable</span><span>)</span><span><br data-jekyll-commonmark-ghpages=""></span><span>levels</span><span>(</span><span>dflong</span><span>$</span><span>Bridge</span><span>)</span><span> </span><span>&lt;-</span><span> </span><span>1</span><span>:</span><span>length</span><span>(</span><span>levels</span><span>(</span><span>dflong</span><span>$</span><span>Bridge</span><span>))</span></code></pre>
</figure>
<p>Please note the code last lines. Keras works only with double and integer variables, hence we have to replace the Bridge-factor variable with indicies between 1 and 4.<br>
The goal of our play model is to predict the number of bicycle per day on a certain bridge dependent on the weekday, the bridge (“Brooklyn.Bridge”, “Manhattan.Bridge”, “Williamsburg.Bridge” ,”Queensboro.Bridge”), if it rains and the temperature. So overall we have 2 categorical variables, one binary and one continuous variable.</p>
<p>One simple way to use a deep net with this dataset is to “One-hot” encode the categorical variables, combine them in one dataframe.</p>
<figure>
<pre><code data-lang="r"><span>require</span><span>(</span><span>keras</span><span>)</span><span><br data-jekyll-commonmark-ghpages=""> <br data-jekyll-commonmark-ghpages=""></span><span>dfOneHot</span><span> </span><span>&lt;-</span><span> </span><span>data.frame</span><span>(</span><span>to_categorical</span><span>(</span><span>dflong</span><span>$</span><span>weekday</span><span>,</span><span> </span><span>8</span><span>),</span><span> </span><span>to_categorical</span><span>(</span><span>dflong</span><span>$</span><span>Bridge</span><span>,</span><span> </span><span>5</span><span>),</span><span> </span><span>dflong</span><span>$</span><span>rain</span><span>,</span><span> </span><span>dflong</span><span>$</span><span>lowTemp</span><span>)</span><span><br data-jekyll-commonmark-ghpages=""> <br data-jekyll-commonmark-ghpages=""></span><span>model_simple</span><span> </span><span>&lt;-</span><span> </span><span>keras_model_sequential</span><span>()</span><span><br data-jekyll-commonmark-ghpages=""> <br data-jekyll-commonmark-ghpages=""></span><span>model_simple</span><span> </span><span>%>%</span><span><br data-jekyll-commonmark-ghpages=""> </span><span>layer_dense</span><span>(</span><span>input_shape</span><span>=</span><span>(</span><span>8+5+1+1</span><span>),</span><span> </span><span>units</span><span>=</span><span>32</span><span>,</span><span> </span><span>activation</span><span> </span><span>=</span><span> </span><span>&quot;relu&quot;</span><span>)</span><span> </span><span>%>%</span><span><br data-jekyll-commonmark-ghpages=""> </span><span>layer_dropout</span><span>(</span><span>0.4</span><span>)</span><span> </span><span>%>%</span><span><br data-jekyll-commonmark-ghpages=""> </span><span>layer_dense</span><span>(</span><span>units</span><span>=</span><span>10</span><span>,</span><span> </span><span>activation</span><span> </span><span>=</span><span> </span><span>&quot;relu&quot;</span><span>)</span><span> </span><span>%>%</span><span><br data-jekyll-commonmark-ghpages=""> </span><span>layer_dropout</span><span>(</span><span>0.2</span><span>)</span><span> </span><span>%>%</span><span><br data-jekyll-commonmark-ghpages=""> </span><span>layer_dense</span><span>(</span><span>units</span><span>=</span><span>1</span><span>)</span><span><br data-jekyll-commonmark-ghpages=""> <br data-jekyll-commonmark-ghpages=""> <br data-jekyll-commonmark-ghpages=""></span><span>model_simple</span><span> </span><span>%>%</span><span> </span><span>compile</span><span>(</span><span>loss</span><span> </span><span>=</span><span> </span><span>&quot;mean_squared_error&quot;</span><span>,</span><span> </span><span>optimizer</span><span> </span><span>=</span><span> </span><span>&quot;sgd&quot;</span><span>,</span><span> </span><span>metric</span><span>=</span><span>&quot;accuracy&quot;</span><span>)</span><span> <br data-jekyll-commonmark-ghpages=""> <br data-jekyll-commonmark-ghpages=""></span><span>model_simple</span><span> </span><span>%>%</span><span> </span><span>fit</span><span>(</span><span>x</span><span> </span><span>=</span><span> </span><span>as.matrix</span><span>(</span><span>dfOneHot</span><span>),</span><span> </span><span>y</span><span>=</span><span> </span><span>as.matrix</span><span>(</span><span>dflong</span><span>$</span><span>ScaledUsers</span><span>),</span><span> </span><span>epochs</span><span> </span><span>=</span><span> </span><span>20</span><span>,</span><span> </span><span>batch_size</span><span> </span><span>=</span><span> </span><span>5</span><span>,</span><span> </span><span>validation_split</span><span> </span><span>=</span><span> </span><span>0.15</span><span>)</span></code></pre>
</figure>
<p>Pretty straight-forward and the only points where people struggle is; setting the input correct (15) and to remember that we need to cast the dataframe to a matrix.<br>
So what about using embeddings instead of one-hot encodings? How can we combine two embeddings (weekday and bridge) with a binary (rain/no-rain) and continuous variable (temperature)?</p>
<p>First we define 3 input layers, one for every embedding and one the two variables. As both categorical variables are just a vector of lenght 1 the shape=1. For the last layer where we feed in the two other variables we need a shape of 2.</p>
<p>Next, we create the two embedding layer. The input dimension is the number of unique values +1, for the dimension we use last week’s rule of thumb.</p>
<p>Third, we concatenate the 3 layers and add the network’s structure.<br>
Finally, we use the keras_model (not keras_sequential_model) to set create the model.</p>
<figure>
<pre><code data-lang="r"><span>embedding_size_weekday</span><span>=</span><span>3</span><span><br data-jekyll-commonmark-ghpages=""></span><span>embedding_size_bridge</span><span>=</span><span>2</span><span><br data-jekyll-commonmark-ghpages=""><br data-jekyll-commonmark-ghpages=""></span><span>## 1</span><span><br data-jekyll-commonmark-ghpages=""></span><span>inp1</span><span> </span><span>&lt;-</span><span> </span><span>layer_input</span><span>(</span><span>shape</span><span> </span><span>=</span><span> </span><span>c</span><span>(</span><span>1</span><span>),</span><span> </span><span>name</span><span> </span><span>=</span><span> </span><span>'inp_weekday'</span><span>)</span><span><br data-jekyll-commonmark-ghpages=""></span><span>inp2</span><span> </span><span>&lt;-</span><span> </span><span>layer_input</span><span>(</span><span>shape</span><span> </span><span>=</span><span> </span><span>c</span><span>(</span><span>1</span><span>),</span><span> </span><span>name</span><span> </span><span>=</span><span> </span><span>'inp_bridge'</span><span>)</span><span><br data-jekyll-commonmark-ghpages=""></span><span>inp3</span><span> </span><span>&lt;-</span><span> </span><span>layer_input</span><span>(</span><span>shape</span><span> </span><span>=</span><span> </span><span>c</span><span>(</span><span>2</span><span>),</span><span> </span><span>name</span><span> </span><span>=</span><span> </span><span>'inp_otherVars'</span><span>)</span><span><br data-jekyll-commonmark-ghpages=""><br data-jekyll-commonmark-ghpages=""></span><span>## 2</span><span><br data-jekyll-commonmark-ghpages=""></span><span>embedding_out1</span><span> </span><span>&lt;-</span><span> </span><span>inp1</span><span> </span><span>%>%</span><span> </span><span>layer_embedding</span><span>(</span><span>input_dim</span><span> </span><span>=</span><span> </span><span>7+1</span><span>,</span><span> </span><span>output_dim</span><span> </span><span>=</span><span> </span><span>embedding_size_weekday</span><span>,</span><span> </span><span>input_length</span><span> </span><span>=</span><span> </span><span>1</span><span>,</span><span> </span><span>name</span><span>=</span><span>&quot;embedding_weekday&quot;</span><span>)</span><span> </span><span>%>%</span><span> </span><span>layer_flatten</span><span>()</span><span><br data-jekyll-commonmark-ghpages=""><br data-jekyll-commonmark-ghpages=""></span><span>embedding_out2</span><span> </span><span>&lt;-</span><span> </span><span>inp2</span><span> </span><span>%>%</span><span> </span><span>layer_embedding</span><span>(</span><span>input_dim</span><span> </span><span>=</span><span> </span><span>4+1</span><span>,</span><span> </span><span>output_dim</span><span> </span><span>=</span><span> </span><span>embedding_size_bridge</span><span>,</span><span> </span><span>input_length</span><span> </span><span>=</span><span> </span><span>1</span><span>,</span><span> </span><span>name</span><span>=</span><span>&quot;embedding_bridge&quot;</span><span>)</span><span> </span><span>%>%</span><span> </span><span>layer_flatten</span><span>()</span><span><br data-jekyll-commonmark-ghpages=""><br data-jekyll-commonmark-ghpages=""></span><span>## 3</span><span><br data-jekyll-commonmark-ghpages=""></span><span>combined_model</span><span> </span><span>&lt;-</span><span> </span><span>layer_concatenate</span><span>(</span><span>c</span><span>(</span><span>embedding_out1</span><span>,</span><span> </span><span>embedding_out2</span><span>,</span><span> </span><span>inp3</span><span>))</span><span> </span><span>%>%</span><span><br data-jekyll-commonmark-ghpages=""> </span><span>layer_dense</span><span>(</span><span>units</span><span>=</span><span>32</span><span>,</span><span> </span><span>activation</span><span> </span><span>=</span><span> </span><span>&quot;relu&quot;</span><span>)</span><span> </span><span>%>%</span><span><br data-jekyll-commonmark-ghpages=""> </span><span>layer_dropout</span><span>(</span><span>0.3</span><span>)</span><span> </span><span>%>%</span><span><br data-jekyll-commonmark-ghpages=""> </span><span>layer_dense</span><span>(</span><span>units</span><span>=</span><span>10</span><span>,</span><span> </span><span>activation</span><span> </span><span>=</span><span> </span><span>&quot;relu&quot;</span><span>)</span><span> </span><span>%>%</span><span><br data-jekyll-commonmark-ghpages=""> </span><span>layer_dropout</span><span>(</span><span>0.15</span><span>)</span><span> </span><span>%>%</span><span><br data-jekyll-commonmark-ghpages=""> </span><span>layer_dense</span><span>(</span><span>units</span><span>=</span><span>1</span><span>)</span><span><br data-jekyll-commonmark-ghpages=""><br data-jekyll-commonmark-ghpages=""></span><span>## 4</span><span><br data-jekyll-commonmark-ghpages=""></span><span>model</span><span> </span><span>&lt;-</span><span> </span><span>keras</span><span>::</span><span>keras_model</span><span>(</span><span>inputs</span><span> </span><span>=</span><span> </span><span>c</span><span>(</span><span>inp1</span><span>,</span><span> </span><span>inp2</span><span>,</span><span> </span><span>inp3</span><span>),</span><span> </span><span>outputs</span><span> </span><span>=</span><span> </span><span>combined_model</span><span>)</span><span><br data-jekyll-commonmark-ghpages=""><br data-jekyll-commonmark-ghpages=""></span><span>model</span><span> </span><span>%>%</span><span> </span><span>compile</span><span>(</span><span>loss</span><span> </span><span>=</span><span> </span><span>&quot;mean_squared_error&quot;</span><span>,</span><span> </span><span>optimizer</span><span> </span><span>=</span><span> </span><span>&quot;sgd&quot;</span><span>,</span><span> </span><span>metric</span><span>=</span><span>&quot;accuracy&quot;</span><span>)</span><span> <br data-jekyll-commonmark-ghpages=""><br data-jekyll-commonmark-ghpages=""></span><span>summary</span><span>(</span><span>model</span><span>)</span></code></pre>
</figure>
<figure>
<pre><code data-lang="text">## ___________________________________________________________________________<br data-jekyll-commonmark-ghpages="">## Layer (type)            Output Shape     Param #  Connected to             <br data-jekyll-commonmark-ghpages="">## ===========================================================================<br data-jekyll-commonmark-ghpages="">## inp_weekday (InputLayer (None, 1)        0                                 <br data-jekyll-commonmark-ghpages="">## ___________________________________________________________________________<br data-jekyll-commonmark-ghpages="">## inp_bridge (InputLayer) (None, 1)        0                                 <br data-jekyll-commonmark-ghpages="">## ___________________________________________________________________________<br data-jekyll-commonmark-ghpages="">## embedding_weekday (Embe (None, 1, 3)     24       inp_weekday[0][0]        <br data-jekyll-commonmark-ghpages="">## ___________________________________________________________________________<br data-jekyll-commonmark-ghpages="">## embedding_bridge (Embed (None, 1, 2)     10       inp_bridge[0][0]         <br data-jekyll-commonmark-ghpages="">## ___________________________________________________________________________<br data-jekyll-commonmark-ghpages="">## flatten_35 (Flatten)    (None, 3)        0        embedding_weekday[0][0]  <br data-jekyll-commonmark-ghpages="">## ___________________________________________________________________________<br data-jekyll-commonmark-ghpages="">## flatten_36 (Flatten)    (None, 2)        0        embedding_bridge[0][0]   <br data-jekyll-commonmark-ghpages="">## ___________________________________________________________________________<br data-jekyll-commonmark-ghpages="">## inp_otherVars (InputLay (None, 2)        0                                 <br data-jekyll-commonmark-ghpages="">## ___________________________________________________________________________<br data-jekyll-commonmark-ghpages="">## concatenate_29 (Concate (None, 7)        0        flatten_35[0][0]         <br data-jekyll-commonmark-ghpages="">##                                                   flatten_36[0][0]         <br data-jekyll-commonmark-ghpages="">##                                                   inp_otherVars[0][0]      <br data-jekyll-commonmark-ghpages="">## ___________________________________________________________________________<br data-jekyll-commonmark-ghpages="">## dense_126 (Dense)       (None, 32)       256      concatenate_29[0][0]     <br data-jekyll-commonmark-ghpages="">## ___________________________________________________________________________<br data-jekyll-commonmark-ghpages="">## dropout_33 (Dropout)    (None, 32)       0        dense_126[0][0]          <br data-jekyll-commonmark-ghpages="">## ___________________________________________________________________________<br data-jekyll-commonmark-ghpages="">## dense_127 (Dense)       (None, 10)       330      dropout_33[0][0]         <br data-jekyll-commonmark-ghpages="">## ___________________________________________________________________________<br data-jekyll-commonmark-ghpages="">## dropout_34 (Dropout)    (None, 10)       0        dense_127[0][0]          <br data-jekyll-commonmark-ghpages="">## ___________________________________________________________________________<br data-jekyll-commonmark-ghpages="">## dense_128 (Dense)       (None, 1)        11       dropout_34[0][0]         <br data-jekyll-commonmark-ghpages="">## ===========================================================================<br data-jekyll-commonmark-ghpages="">## Total params: 631<br data-jekyll-commonmark-ghpages="">## Trainable params: 631<br data-jekyll-commonmark-ghpages="">## Non-trainable params: 0<br data-jekyll-commonmark-ghpages="">## ___________________________________________________________________________</code></pre>
</figure>
<p>The model summary shows that the input takes place at different times during training. The input of the “other” variables happens late in the process.</p>
<p>In order to train this model, we need to feed the data in a list structure. Each input layer gets their own list of elements.</p>
<figure>
<pre><code data-lang="r"><span>### a list with an element for each individual input layer.</span><span><br data-jekyll-commonmark-ghpages=""></span><span>inputVariables</span><span> </span><span>&lt;-</span><span> </span><span>list</span><span>(</span><span>as.matrix</span><span>(</span><span>dflong</span><span>$</span><span>weekday</span><span>),</span><span> </span><span>as.matrix</span><span>(</span><span>dflong</span><span>$</span><span>Bridge</span><span>),</span><span> </span><span>as.matrix</span><span>(</span><span>dflong</span><span>[,</span><span>c</span><span>(</span><span>&quot;lowTemp&quot;</span><span>,</span><span>&quot;rain&quot;</span><span>)]))</span><span><br data-jekyll-commonmark-ghpages=""> <br data-jekyll-commonmark-ghpages=""></span><span>model</span><span> </span><span>%>%</span><span> </span><span>fit</span><span>(</span><span>x</span><span> </span><span>=</span><span> </span><span>inputVariables</span><span>,</span><span><br data-jekyll-commonmark-ghpages=""> </span><span>y</span><span>=</span><span> </span><span>as.matrix</span><span>(</span><span>dflong</span><span>$</span><span>ScaledUsers</span><span>),</span><span> </span><span>epochs</span><span> </span><span>=</span><span> </span><span>20</span><span>,</span><span> </span><span>batch_size</span><span> </span><span>=</span><span> </span><span>2</span><span>)</span></code></pre>
</figure>
<p>Comparing the two approaches, it is pretty clear that the one-hot encoding will stay the norm. It feels very artificial to represent categorical variables with embeddings in Keras. There is either room for a wrapper function to automatically create the input layer part or a redesign of layer_concatenate function.</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="http://flovv.github.io/Embeddings_with_keras_part2/"> Florian Teschner</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 width="1" alt="" src="http://feeds.feedburner.com/~r/RBloggers/~4/HppKYmfwAek" height="1"></a></div>