Skip to content

Instantly share code, notes, and snippets.

@simecek
Last active January 16, 2021 13:29
Show Gist options
  • Star 29 You must be signed in to star a gist
  • Fork 8 You must be signed in to fork a gist
  • Save simecek/019d87c55fec3839d95bbf8489dde61d to your computer and use it in GitHub Desktop.
Save simecek/019d87c55fec3839d95bbf8489dde61d to your computer and use it in GitHub Desktop.
How to add R code to your (IPython) Jupyter Notebook
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"%load_ext rpy2.ipython"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"import warnings\n",
"warnings.filterwarnings('ignore')"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"array([1], dtype=int32)"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"%R require(ggplot2); require(tidyr)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"import numpy as np\n",
"import pandas as pd \n",
"np.random.seed(42)\n",
"# Make a pandas DataFrame\n",
"df = pd.DataFrame(np.random.normal(0,1,size=(100, 3)), columns=list('ABC'))\n",
"df['C'] = df['C'] + 2"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\ncMFgMEgkEr7jWJuwsLCEhASO41555ZXq6mq5XM53IqtSV1f3/fffr1y50t7e/sCBAxkZGUuXLuU7\nFHQCBX0PSkpKAgMDr1y5UlZWNmnSJL7jWCeGYViWdXJy4juItTly5MjUqVPNH3GrVCofHx++E0Hn\nUND3oKio6JlnnqmqqsrNzUVBW1xubu7Zs2erq6sffvhhe3t7vuNYm9ra2gkTJphfC4XCoUOH8psH\nugIfEnaVXq8/d+7cZ5999uOPP5aWlppMJr4TWZuwsLBVq1Zt3rzZwcGhqKiI7zjWxtXVtaamxvya\nZdmvvvqK3zzQFSjorjp69GhUVNTKlSvfffddhUJx+vRpvhNZJ4FAIJVKW1pa+A5ibQIDA/ft29fc\n3EwIKSoqampq4jsRdA6XOLqqqKho3rx55teTJk0qKioaN24cv5GszMGDB0+dOmUwGBwcHN58802+\n41ibgQMHxsfHp6SkCAQCmUz23HPP8Z0IOocvqgAAUAqXOAAAKIWCBgCgFAoaAIBSKGgAAEqhoAEA\nKIWCBgtrbGxcunTp6NGjXVxclEpleXn5HRdra2vbsGFDD2cD6F1Q0GBhSUlJYrG4vLy8pqZm7ty5\n0dHRDMPcvhgKGqBTKGiwpBMnTvzyyy8ff/yxVCoViUSLFi1aunRpbW0tx3HPP/+8u7u7r6/vkiVL\nTCbT4sWLL1y4oNPpCCEbNmzw9PT08vJatmwZy7Isyy5btszDwyMkJESn06WlpXEcl5KSMmbMGC8v\nr5UrV3IcV1BQkJCQEBUV9cYbbyxcuPCbb74hhBiNxuHDh1+5coXv0wBgIRyA5Xz11VfJycm3v19Z\nWanVag0GA8Mw3t7eZ8+evXbtmpeXF8dxR44cCQ0NbWpq0uv1MTExX3zxxXfffTd58mSDwVBVVSWV\nSr/++utdu3YFBAS0tLS0trY++uij2dnZ+fn5/fr12717d1tb2/79+6OiojiOy87Ojo6O7uljBug2\n+Ko3WBLLsty/v5va1tYmFApHjhy5adOmXbt2HTt27NKlS+3t7TcW2L9//19//RUZGUkIaW1tvXjx\nYlVVVXx8vFgslsvlkydPJoTk5eUlJib269ePEJKYmJiXlxcdHT1hwgStVksIUSqVycnJDQ0N6enp\nTz31VI8eMEB3wiUOsCR/f//CwsKbp/pTKpXZ2dkFBQWRkZE1NTXz588PCgq6eRWTyTRnzpzi4uLi\n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\n"
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"%%R -i df\n",
"df %>% \n",
" gather(\"Category\", \"X\") %>%\n",
" ggplot(aes(x = Category, y = X, fill = Category)) +\n",
" geom_violin() +\n",
" stat_summary(fun.y=mean, color='black', geom='point', size = 3) +\n",
" labs(title = \"Violin plot\",\n",
" subtitle = \"Means indicated as black dots\",\n",
" captions = \"Numbers generated in Numpy\") +\n",
" theme_bw()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.5.2"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
@simecek
Copy link
Author

simecek commented Mar 23, 2017

The installation of R and R magic into Jupyter notebook is described here:

https://www.datacamp.com/community/blog/jupyter-notebook-r#gs.z0gxLNc

Or you can run it all in the docker and do not care about installation

https://github.com/jupyter/docker-stacks/tree/master/datascience-notebook

And even better, you can run it all in the cloud and do not care about anything, except your credit card bill (~$0.05 / hour you actually use it)

https://simecek.github.io/blog/2017/02/17/data-science-amazon-vm-with-start/stop-functionality/

@drwecki
Copy link

drwecki commented Apr 23, 2018

Can you explain what this piece of code is doing? (also is this part of R magic or is it just part of R). Thanks, I'm just wrapping my head around R magics.

df %>%
gather("Category", "X") %>%

@raymondben
Copy link

@drwecki, the pipe operator %>% just pushes the first thing into the second, so this code is equivalent to:

gather(df, "Category", "X")

And the gather function takes data from multiple columns and collapses them into key-value pairs

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment