<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/are-python-users-more-likely-to-get-into-slytherin/"></div></div><div></div></div><div></div></div>
<div>
(This article was first published on <strong><a href="http://www.masalmon.eu/2018/01/01/sortinghat/"> Maëlle</a></strong>, and kindly contributed to <a rel="nofollow" href="https://www.r-bloggers.com/">R-bloggers)</a> </div>
<p><em>This post requires some familiarity with the Harry Potter books but I’m committed to making this blog friendly to everyone, even Muggles/Nomajes.</em></p>
<p>Have you seen <a rel="nofollow" href="http://blog.sellorm.com/2017/12/18/learn-to-write-command-line-utilities-in-r/" target="_blank">Mark Sellors’ blog post series</a> about writing command line utilities in R? It’s a great one but I was a bit puzzled by his using randomness to assign houses in his sorting hat example (he added a <a rel="nofollow" href="http://blog.sellorm.com/2017/12/21/command-line-utilities-in-r-pt-4/" target="_blank">new method based on name <code>digest</code>-ing</a> in the meantime).</p>
<blockquote class="twitter-tweet" data-lang="ca">
<p lang="en" dir="ltr">This is a really cool <a rel="nofollow" href="https://twitter.com/hashtag/rstats?src=hash&ref_src=twsrc%5Etfw" target="_blank">#rstats</a> tutorial… but since when does the sorting hat assign a random Hogwarts house?! <img alt="🧙" src="https://s.w.org/images/core/emoji/2.3/72x72/1f9d9.png" class="wp-smiley"><br>
<img alt="♀" src="https://s.w.org/images/core/emoji/2.3/72x72/2640.png" class="wp-smiley"><img alt="🎩" src="https://s.w.org/images/core/emoji/2.3/72x72/1f3a9.png" class="wp-smiley"><img alt="🎲" src="https://s.w.org/images/core/emoji/2.3/72x72/1f3b2.png" class="wp-smiley"><img alt="➡" src="https://s.w.org/images/core/emoji/2.3/72x72/27a1.png" class="wp-smiley"><img alt="🏠" src="https://s.w.org/images/core/emoji/2.3/72x72/1f3e0.png" class="wp-smiley"><img alt="🤔" src="https://s.w.org/images/core/emoji/2.3/72x72/1f914.png" class="wp-smiley"> <a rel="nofollow" href="https://t.co/Ff8CHR6jb9" target="_blank">https://t.co/Ff8CHR6jb9</a></p>
<p>— Maëlle Salmon <img alt="🐟" src="https://s.w.org/images/core/emoji/2.3/72x72/1f41f.png" class="wp-smiley"> (@ma_salmon) <a rel="nofollow" href="https://twitter.com/ma_salmon/status/943094156695670784?ref_src=twsrc%5Etfw" target="_blank">19 de desembre de 2017</a></p></blockquote>
<p>This prompted a reply by David Hood who later came up with R code to assign you to a Hogwarts house based on your Twitter activity!</p>
<blockquote class="twitter-tweet" data-lang="ca">
<p lang="en" dir="ltr">It should be possible to assign House on the basis of Twitter analysis (among R using tweeters). Quatitatively: <br>Original posts – opinionated – Gryffindor<br>Replies – social – Slytherin<br>posts links out of Twitter – homework – Ravenclaw<br>Retweets- keeping it all working – Hufflepuff</p>
<p>— David Hood (@Thoughtfulnz) <a rel="nofollow" href="https://twitter.com/Thoughtfulnz/status/943237103151849473?ref_src=twsrc%5Etfw" target="_blank">19 de desembre de 2017</a></p></blockquote>
<p>I was thrilled to <a rel="nofollow" href="https://github.com/thoughtfulbloke/sorting_stat" target="_blank">see David Hood’s sorting hat Github repo</a> and thought it’d be the perfect occasion to answer that fascinating question: are #python users more likely to get into Slytherin than #rstats users?</p>
<p><em>Another note: I do not care about any Python vs. R fights except for Quidditch games, so go away trolls.</em></p>
<p><span></span></p>
<h1>Getting Twitter users</h1>
<p>In his repo, David Hood used accounts sampled from their posting on the #rstats hashtag, and uses their scores as a scale against which to rate any user. I had to take a different approach because I wanted to compare R against Python posting on a basis that wouldn’t be R. I chose to use JavaScript posters as a reference set, because you can’t randomly search Twitter users and even that wouldn’t necessarily give me a “representative” set. Therefore, I had to assume something, and I chose to assume the Sorting hat would have chosen JavaScript tweeps as a reference set. I wanted more than 200 JavaScript tweeps and more than 100 R and Python tweeps, respectively, and asked for a bit more from Twitter API because I knew there’d be duplicates from people tweeting about more than one of these languages (like <a rel="nofollow" href="https://twitter.com/arnicas" target="_blank">Lynn Cherny</a> for instance). I didn’t do any sample size calculation. Here is how I got users:</p>
<div>
<div>
<pre><code><span>library</span><span>(</span><span>&quot;magrittr&quot;</span><span>)</span><span>
</span><span># get users</span><span>
</span><span>languages</span><span> </span><span>&lt;-</span><span> </span><span>c</span><span>(</span><span>&quot;javascript&quot;</span><span>,</span><span> </span><span>&quot;python&quot;</span><span>,</span><span> </span><span>&quot;rstats&quot;</span><span>)</span><span>
</span><span># a bit more than what we want because of exclusion criterion: duplicate</span><span>
</span><span>no</span><span> </span><span>&lt;-</span><span> </span><span>c</span><span>(</span><span>260</span><span>,</span><span> </span><span>130</span><span>,</span><span> </span><span>130</span><span>)</span><span>
</span><span>get_users</span><span> </span><span>&lt;-</span><span> </span><span>function</span><span>(</span><span>language</span><span>,</span><span> </span><span>no</span><span>){</span><span>
</span><span>users</span><span> </span><span>&lt;-</span><span> </span><span>rtweet</span><span>::</span><span>search_users</span><span>(</span><span>q</span><span> </span><span>=</span><span> </span><span>paste0</span><span>(</span><span>&quot;#&quot;</span><span>,</span><span> </span><span>language</span><span>),</span><span>
</span><span>n</span><span> </span><span>=</span><span> </span><span>no</span><span>)</span><span>
</span><span>users</span><span>$</span><span>language</span><span> </span><span>&lt;-</span><span> </span><span>language</span><span>
</span><span>return</span><span>(</span><span>users</span><span>)</span><span>
</span><span>}</span><span>
</span><span># remove duplicates</span><span>
</span><span>users</span><span> </span><span>&lt;-</span><span> </span><span>purrr</span><span>::</span><span>map2_df</span><span>(</span><span>languages</span><span>,</span><span> </span><span>no</span><span>,</span><span> </span><span>get_users</span><span>)</span><span>
</span><span>users</span><span> </span><span>&lt;-</span><span> </span><span>dplyr</span><span>::</span><span>group_by</span><span>(</span><span>users</span><span>,</span><span> </span><span>screen_name</span><span>)</span><span> </span><span>%>%</span><span>
</span><span>dplyr</span><span>::</span><span>mutate</span><span>(</span><span>duplicate_user</span><span> </span><span>=</span><span> </span><span>n</span><span>()</span><span> </span><span>></span><span> </span><span>1</span><span>)</span><span> </span><span>%>%</span><span>
</span><span>dplyr</span><span>::</span><span>ungroup</span><span>()</span><span> </span><span>%>%</span><span>
</span><span>dplyr</span><span>::</span><span>filter</span><span>(</span><span>!</span><span>duplicate_user</span><span>)</span><span>
</span></code></pre>
</div>
</div>
<p>Here is the number of accounts I got:</p>
<div>
<div>
<pre><code><span>users</span><span> </span><span>%>%</span><span>
</span><span>dplyr</span><span>::</span><span>group_by</span><span>(</span><span>language</span><span>)</span><span> </span><span>%>%</span><span>
</span><span>dplyr</span><span>::</span><span>summarise</span><span>(</span><span>n</span><span> </span><span>=</span><span> </span><span>n</span><span>())</span><span> </span><span>%>%</span><span>
</span><span>knitr</span><span>::</span><span>kable</span><span>()</span><span>
</span></code></pre>
</div>
</div>
<table>
<thead>
<tr>
<th>language</th>
<th>n</th>
</tr>
</thead>
<tbody>
<tr>
<td>javascript</td>
<td>258</td>
</tr>
<tr>
<td>python</td>
<td>126</td>
</tr>
<tr>
<td>rstats</td>
<td>128</td>
</tr>
</tbody>
</table>
<p>I had actually overestimated the amount of overlap between accounts. Well this does not mean any of these accounts is exclusively related to one of the languages, I have for instance seen <code>rtweet</code> creator <a rel="nofollow" href="https://twitter.com/kearneymw" target="_blank">Mike Kearney</a> himself tweet about Python and he’s still in my R sample. It’s because the rank in Twitter Python set might be different than the Twitter R rank, but I’ll go on and assume that if an account was returned for R rather than Python, then it’s not a bad representant of R.</p>
<h1>Computing the sorting metrics</h1>
<p>David Hood calculates a metric for each house, with the logic explained in his <a rel="nofollow" href="https://github.com/thoughtfulbloke/sorting_stat" target="_blank">Github repo</a> (I feel a heart pinch every time I write that because it is such a great repo that its creator should <em>blog</em>, don’t you think?). I simply used his code after updating <code>rtweet</code> when I realized the output I got from the package had different column names. I probably should have cared a bit more about (Non) Standard Evaluation when wrapping the code in a function but anyway I’m relying on magic!</p>
<div>
<div>
<pre><code><span>users</span><span> </span><span>&lt;-</span><span> </span><span>dplyr</span><span>::</span><span>select</span><span>(</span><span>users</span><span>,</span><span> </span><span>screen_name</span><span>,</span><span> </span><span>language</span><span>)</span><span>
</span><span># function to get scores</span><span>
</span><span>get_scores</span><span> </span><span>&lt;-</span><span> </span><span>function</span><span>(</span><span>screen_name</span><span>){</span><span>
</span><span>print</span><span>(</span><span>screen_name</span><span>)</span><span>
</span><span>data</span><span> </span><span>&lt;-</span><span> </span><span>try</span><span>(</span><span>rtweet</span><span>::</span><span>get_timeline</span><span>(</span><span>user</span><span> </span><span>=</span><span> </span><span>screen_name</span><span>,</span><span> </span><span>n</span><span> </span><span>=</span><span> </span><span>1000</span><span>),</span><span>
</span><span>silent</span><span> </span><span>=</span><span> </span><span>TRUE</span><span>)</span><span>
</span><span>if</span><span>(</span><span>!</span><span>is</span><span>(</span><span>data</span><span>,</span><span> </span><span>&quot;try-error&quot;</span><span>)){</span><span>
</span><span>data</span><span> </span><span>%>%</span><span> </span><span>dplyr</span><span>::</span><span>mutate</span><span>(</span><span>has_external_links</span><span> </span><span>=</span><span> </span><span>!</span><span>is.na</span><span>(</span><span>urls_url</span><span>),</span><span>
</span><span>has_reply</span><span> </span><span>=</span><span> </span><span>!</span><span>is.na</span><span>(</span><span>reply_to_screen_name</span><span>),</span><span>
</span><span>has_reply_to_self</span><span> </span><span>=</span><span> </span><span>screen_name</span><span> </span><span>==</span><span> </span><span>reply_to_screen_name</span><span> </span><span>&amp;</span><span> </span><span>!</span><span>is.na</span><span>(</span><span>reply_to_screen_name</span><span>),</span><span>
</span><span>has_retweet</span><span> </span><span>=</span><span> </span><span>!</span><span>is.na</span><span>(</span><span>quoted_status_id</span><span>)</span><span> </span><span>|</span><span> </span><span>!</span><span>is.na</span><span>(</span><span>retweet_status_id</span><span>))</span><span> </span><span>%>%</span><span>
</span><span>dplyr</span><span>::</span><span>group_by</span><span>(</span><span>screen_name</span><span>)</span><span> </span><span>%>%</span><span>
</span><span>dplyr</span><span>::</span><span>summarise</span><span>(</span><span>
</span><span>slyth</span><span> </span><span>=</span><span> </span><span>sum</span><span>(</span><span>has_reply</span><span> </span><span>&amp;</span><span> </span><span>!</span><span>has_reply_to_self</span><span>)</span><span> </span><span>/</span><span> </span><span>n</span><span>(),</span><span>
</span><span>huffl</span><span> </span><span>=</span><span> </span><span>sum</span><span>(</span><span>has_retweet</span><span>)</span><span> </span><span>/</span><span> </span><span>n</span><span>(),</span><span>
</span><span>raven</span><span> </span><span>=</span><span> </span><span>sum</span><span>(</span><span>has_external_links</span><span> </span><span>&amp;</span><span> </span><span>!</span><span>has_retweet</span><span>)</span><span> </span><span>/</span><span> </span><span>n</span><span>(),</span><span>
</span><span>griff</span><span> </span><span>=</span><span> </span><span>(</span><span>n</span><span>()</span><span> </span><span>-</span><span> </span><span>sum</span><span>(</span><span>has_reply</span><span> </span><span>|</span><span>
</span><span>has_retweet</span><span> </span><span>|</span><span>
</span><span>has_external_links</span><span> </span><span>|</span><span>
</span><span>has_reply_to_self</span><span>)</span><span>
</span><span>)</span><span> </span><span>/</span><span> </span><span>n</span><span>()</span><span>
</span><span>)</span><span> </span><span>}</span><span>else</span><span>{</span><span>
</span><span>NULL</span><span>
</span><span>}</span><span>
</span><span>}</span><span>
</span><span>scores</span><span> </span><span>&lt;-</span><span> </span><span>purrr</span><span>::</span><span>map_df</span><span>(</span><span>users</span><span>$</span><span>screen_name</span><span>,</span><span> </span><span>get_scores</span><span>)</span><span>
</span></code></pre>
</div>
</div>
<p>Let’s have a look at the distribution of scores in the different populations.</p>
<div>
<div>
<pre><code><span>library</span><span>(</span><span>&quot;ggplot2&quot;</span><span>)</span><span>
</span><span>users</span><span> </span><span>&lt;-</span><span> </span><span>dplyr</span><span>::</span><span>select</span><span>(</span><span>users</span><span>,</span><span> </span><span>screen_name</span><span>,</span><span> </span><span>language</span><span>)</span><span>
</span><span>scores</span><span> </span><span>&lt;-</span><span> </span><span>dplyr</span><span>::</span><span>left_join</span><span>(</span><span>scores</span><span>,</span><span> </span><span>users</span><span>,</span><span> </span><span>by</span><span> </span><span>=</span><span> </span><span>&quot;screen_name&quot;</span><span>)</span><span>
</span><span>scores</span><span> </span><span>%>%</span><span> </span><span>tidyr</span><span>::</span><span>gather</span><span>(</span><span>&quot;house&quot;</span><span>,</span><span> </span><span>&quot;metric&quot;</span><span>,</span><span> </span><span>slyth</span><span>:</span><span>griff</span><span>)</span><span> </span><span>%>%</span><span>
</span><span>ggplot</span><span>()</span><span> </span><span>+</span><span>
</span><span>geom_density</span><span>(</span><span>aes</span><span>(</span><span>metric</span><span>))</span><span> </span><span>+</span><span>
</span><span>facet_grid</span><span>(</span><span>language</span><span> </span><span>~</span><span> </span><span>house</span><span>)</span><span>
</span></code></pre>
</div>
</div>
<p><img alt="plot of chunk unnamed-chunk-4" src="https://i2.wp.com/www.masalmon.eu/figure/source/2018-01-01-sortinghat/unnamed-chunk-4-1.png?w=456" data-recalc-dims="1"></p>
<p>The graph above gives an idea of what the results will look like…</p>
<h1>Applying the sorting hat</h1>
<p>For each R or Python account, the sorting hat as written by David Hood will compute a score by house obtained by sorting this account and all JavaScript users by the house metric, and then dividing the judged account’s rank by the total number of JavaScript users. The chosen house is the one with the highest score. Note that this script does not ensure that each house has the same size, but in real life the Sorting hat might use other information than Twitter like Instagram or Github activity, and other programming languages might help fill all houses.</p>
<p>I think copy pasting the same code for all houses was the quickest method for David Hood which is fine but I decided I’d re-format the code a little bit to 1) avoid repetitions, 2) getting acquainted with tidy eval (I know, I know, I’m really late) with <a rel="nofollow" href="http://www.onceupondata.com/2017/08/12/my-first-steps-into-the-world-of-tidyeval/" target="_blank">Omayma’s blog post</a> as a guide. I also browsed <a rel="nofollow" href="https://github.com/tidyverse/dplyr/issues/2944" target="_blank">this issue</a> to find an example of the correct syntax for <code>arrange</code>. I clearly need more practice, which I intend to get this year, using <a rel="nofollow" href="https://edwinth.github.io/blog/dplyr-recipes/" target="_blank">Edwin Thoen’s reference</a> among other things.</p>
<div>
<div>
<pre><code><span>library</span><span>(</span><span>&quot;rlang&quot;</span><span>)</span><span>
</span><span>compare_with</span><span> </span><span>&lt;-</span><span> </span><span>dplyr</span><span>::</span><span>filter</span><span>(</span><span>scores</span><span>,</span><span> </span><span>language</span><span> </span><span>==</span><span> </span><span>&quot;javascript&quot;</span><span>)</span><span>
</span><span>compare_with</span><span>$</span><span>isSortee</span><span> </span><span>&lt;-</span><span> </span><span>FALSE</span><span>
</span><span>candidates</span><span> </span><span>&lt;-</span><span> </span><span>dplyr</span><span>::</span><span>filter</span><span>(</span><span>scores</span><span>,</span><span> </span><span>language</span><span> </span><span>!=</span><span> </span><span>&quot;javascript&quot;</span><span>)</span><span>
</span><span>candidates</span><span>$</span><span>isSortee</span><span> </span><span>&lt;-</span><span> </span><span>TRUE</span><span>
</span><span># function for getting the score for one candidate &amp; one house</span><span>
</span><span>get_score</span><span> </span><span>&lt;-</span><span> </span><span>function</span><span>(</span><span>house</span><span>,</span><span> </span><span>fullname</span><span>,</span><span> </span><span>candidate</span><span>,</span><span> </span><span>compare_with</span><span>){</span><span>
</span><span>result</span><span> </span><span>&lt;-</span><span> </span><span>dplyr</span><span>::</span><span>bind_rows</span><span>(</span><span>compare_with</span><span>,</span><span> </span><span>candidate</span><span>)</span><span> </span><span>%>%</span><span> </span><span>dplyr</span><span>::</span><span>arrange</span><span>(</span><span>!!</span><span>sym</span><span>(</span><span>house</span><span>))</span><span> </span><span>%>%</span><span> </span><span>dplyr</span><span>::</span><span>select</span><span>(</span><span>!!</span><span>house</span><span>,</span><span>isSortee</span><span>)</span><span>
</span><span>score</span><span> </span><span>&lt;-</span><span> </span><span>round</span><span>(</span><span>which</span><span>(</span><span>result</span><span>$</span><span>isSortee</span><span>)</span><span>/</span><span>nrow</span><span>(</span><span>result</span><span>),</span><span>3</span><span>)</span><span>
</span><span>tibble</span><span>::</span><span>tibble</span><span>(</span><span>house</span><span> </span><span>=</span><span> </span><span>quo_name</span><span>(</span><span>fullname</span><span>),</span><span>
</span><span>score</span><span> </span><span>=</span><span> </span><span>score</span><span>)</span><span>
</span><span>}</span><span>
</span><span># function for getting the candidate house</span><span>
</span><span># based on the house scores</span><span>
</span><span>sort_user</span><span> </span><span>&lt;-</span><span> </span><span>function</span><span>(</span><span>candidate</span><span>,</span><span> </span><span>compare_with</span><span>){</span><span>
</span><span># seed for the case of equal scores</span><span>
</span><span>set.seed</span><span>(</span><span>42</span><span>)</span><span>
</span><span>result</span><span> </span><span>&lt;-</span><span> </span><span>purrr</span><span>::</span><span>map2_df</span><span>(</span><span>c</span><span>(</span><span>&quot;slyth&quot;</span><span>,</span><span> </span><span>&quot;huffl&quot;</span><span>,</span><span> </span><span>&quot;raven&quot;</span><span>,</span><span> </span><span>&quot;griff&quot;</span><span>),</span><span>
</span><span>c</span><span>(</span><span>&quot;Slytherin&quot;</span><span>,</span><span> </span><span>&quot;Hufflepuff&quot;</span><span>,</span><span>
</span><span>&quot;Ravenclaw&quot;</span><span>,</span><span> </span><span>&quot;Gryffindor&quot;</span><span>),</span><span>
</span><span>get_score</span><span>,</span><span>
</span><span>candidate</span><span> </span><span>=</span><span> </span><span>candidate</span><span>,</span><span> </span><span>compare_with</span><span> </span><span>=</span><span> </span><span>compare_with</span><span>)</span><span>
</span><span>result</span><span> </span><span>%>%</span><span>
</span><span>dplyr</span><span>::</span><span>arrange</span><span>(</span><span>desc</span><span>(</span><span>score</span><span>))</span><span> </span><span>%>%</span><span>
</span><span>head</span><span>(</span><span>n</span><span> </span><span>=</span><span> </span><span>1</span><span>)</span><span> </span><span>%>%</span><span>
</span><span>dplyr</span><span>::</span><span>mutate</span><span>(</span><span>screen_name</span><span> </span><span>=</span><span> </span><span>candidate</span><span>$</span><span>screen_name</span><span>,</span><span>
</span><span>language</span><span> </span><span>=</span><span> </span><span>candidate</span><span>$</span><span>language</span><span>)</span><span> </span><span>%>%</span><span>
</span><span>dplyr</span><span>::</span><span>select</span><span>(</span><span>house</span><span>,</span><span> </span><span>screen_name</span><span>,</span><span> </span><span>language</span><span>)</span><span>
</span><span>}</span><span>
</span><span>houses</span><span> </span><span>&lt;-</span><span> </span><span>candidates</span><span> </span><span>%>%</span><span>
</span><span>split</span><span>(</span><span>candidates</span><span>$</span><span>screen_name</span><span>)</span><span> </span><span>%>%</span><span>
</span><span>purrr</span><span>::</span><span>map_df</span><span>(</span><span>sort_user</span><span>,</span><span> </span><span>compare_with</span><span> </span><span>=</span><span> </span><span>compare_with</span><span>)</span><span>
</span><span>readr</span><span>::</span><span>write_csv</span><span>(</span><span>houses</span><span>,</span><span> </span><span>path</span><span> </span><span>=</span><span> </span><span>&quot;data/2018-01-01-sortinghat-houses.csv&quot;</span><span>)</span><span>
</span></code></pre>
</div>
</div>
<h1>Answering the question</h1>
<p>So now has come the crucial moment of truth… Are Python users more likely to get sorted into Slytherin? I’ll leave statistical tests as an exercise to the reader and just produce a visualization.</p>
<div>
<div>
<pre><code><span>library</span><span>(</span><span>&quot;hrbrthemes&quot;</span><span>)</span><span>
</span><span>ggplot</span><span>(</span><span>houses</span><span>)</span><span> </span><span>+</span><span>
</span><span>geom_bar</span><span>(</span><span>aes</span><span>(</span><span>language</span><span>,</span><span> </span><span>fill</span><span> </span><span>=</span><span> </span><span>house</span><span>),</span><span>
</span><span>position</span><span> </span><span>=</span><span> </span><span>&quot;fill&quot;</span><span>)</span><span>+</span><span>
</span><span>theme_ipsum</span><span>(</span><span>base_size</span><span> </span><span>=</span><span> </span><span>20</span><span>,</span><span>
</span><span>axis_title_size</span><span> </span><span>=</span><span> </span><span>12</span><span>)</span><span> </span><span>+</span><span>
</span><span>viridis</span><span>::</span><span>scale_fill_viridis</span><span>(</span><span>discrete</span><span> </span><span>=</span><span> </span><span>TRUE</span><span>)</span><span>
</span></code></pre>
</div>
</div>
<p><img alt="plot of chunk unnamed-chunk-7" src="https://i2.wp.com/www.masalmon.eu/figure/source/2018-01-01-sortinghat/unnamed-chunk-7-1.png?w=456" data-recalc-dims="1"></p>
<p>Oh, what a non-intuitive result! But maybe this means that the R community is very social on Twitter; or my sample is too small? In any case, I guess this is good news if the R Slytherin sample contain <a rel="nofollow" href="http://harrypotter.wikia.com/wiki/Parseltongue" target="_blank">parsselmouths</a>: quite a few useRs should then be able to talk to all the terrifying Australian snakes they’ll meet in Brisbane during useR! 2018.</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://www.masalmon.eu/2018/01/01/sortinghat/"> Maëlle</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/85YBiioIi74" height="1"></a></div>