Skip to content

Instantly share code, notes, and snippets.

@danmusetoiu
Last active May 7, 2018 12:39
Show Gist options
  • Save danmusetoiu/666fe301eec48a3927bb71d2f54031f2 to your computer and use it in GitHub Desktop.
Save danmusetoiu/666fe301eec48a3927bb71d2f54031f2 to your computer and use it in GitHub Desktop.
CERN
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Ca să împac și capra și varza, adică să vă arăt și cum funcționează jupyter notebook, dar și cum arată dataset-ul pus la dispoziție de CERN, am decis ca această postare să fie un fel de doi în unu. \n",
"Așadar, ăsta e jupyter notebook, un instrument util folosit pe scară largă atunci când vrei să-ți împarți munca în comunitate. Se deschide în browser, la adresa http://localhost:8888/... Poți scrie fie texte ca ăsta fie direct codul, care poate fi rulat, bloc cu bloc, cam așa:"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Let's rock!\n"
]
}
],
"source": [
"print ('Let\\'s rock!')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Comanda <print> a fost executata, iar rezultatul a fost afisat. Ca sa mearga treaba mai repede, ma vad nevoit sa renunt la diacritice.\n",
" Ziceam de CERN. Au facut public un dataset si au lansat o competitie de machine learnig. Detaliile le gasiti pe kaggle. Au si premii de 25 k euro, impartiti pe locuri: unu, doi si trei. Hai sa aruncam o privire la dataset. Dimensiunea fisierelor (5 in total) e in medie de 14 giga. Din fericire, cineva s-a gandit si la astia ca mine si a adaugat un sample de \"doar\" 861 de mega. Se cheama, evident, \"train_sample\". Dupa descarcare, hop cu el pe Desktop ca tot taranul cu macbook, ca sa-l gasesc, chipurile, mai usor.\n",
" Ca sa scobim prin sample, recomand pandas. Mai mult ca sigur vom avea nevoie si de numpy, asa ca hai sa le luam pe amandoua, folosind alias-uri general acceptate, pd si np."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"N-a dat eroare, e de bine!\n",
"Cei de la CERN s-au gandit sa ne faca viata mai usoara si au creat si o librarie python special pentru aceasta competitie. Se cheama TrackML si pare simpatica, eu am luat-o cu <pip install trackml> si apoi am importat-o clasic, cu un alias inventat de mine:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"import trackml as tml"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Yep, fara eroare! Vad mai tarziu ce stie sa faca aceasta librarie. Acu' hai sa aruncam o privire pe train_sample, care dupa dezarhivare se transforma intr-un folder \"train_100_events\". In interiorul folderului se gasesc, pentru fiecare event, patru fisiere csv (cells, hits, particles, truth). Sa le luam pe rand:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"df = pd.read_csv('/Users/dan/Desktop/train_100_events/event000001000-cells.csv')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"Bun, iar fara eroare. Murphy ar zice ca sigur am gresit ceva :))) Asa ca hai sa verific capul, coada si descrierea:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" hit_id ch0 ch1 value\n",
"0 1 209 617 0.013832\n",
"1 1 210 617 0.079887\n",
"2 1 209 618 0.211723\n",
"3 2 68 446 0.334087\n",
"4 3 58 954 0.034005\n"
]
}
],
"source": [
"print(df.head())"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" hit_id ch0 ch1 value\n",
"664991 120936 122 5 1.0\n",
"664992 120936 123 5 1.0\n",
"664993 120937 430 11 1.0\n",
"664994 120938 260 7 1.0\n",
"664995 120939 134 5 1.0\n"
]
}
],
"source": [
"print(df.tail())"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>hit_id</th>\n",
" <th>ch0</th>\n",
" <th>ch1</th>\n",
" <th>value</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>664996.000000</td>\n",
" <td>664996.000000</td>\n",
" <td>664996.000000</td>\n",
" <td>6.649960e+05</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>49603.957174</td>\n",
" <td>211.529248</td>\n",
" <td>444.395715</td>\n",
" <td>3.560307e-01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>32415.296519</td>\n",
" <td>156.399517</td>\n",
" <td>411.081790</td>\n",
" <td>4.324582e-01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>1.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>1.461840e-07</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td>25174.000000</td>\n",
" <td>97.000000</td>\n",
" <td>55.000000</td>\n",
" <td>5.364858e-02</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>36148.000000</td>\n",
" <td>191.000000</td>\n",
" <td>340.000000</td>\n",
" <td>6.512935e-02</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td>78196.000000</td>\n",
" <td>287.000000</td>\n",
" <td>802.000000</td>\n",
" <td>1.000000e+00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>120939.000000</td>\n",
" <td>1195.000000</td>\n",
" <td>1279.000000</td>\n",
" <td>1.000000e+00</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" hit_id ch0 ch1 value\n",
"count 664996.000000 664996.000000 664996.000000 6.649960e+05\n",
"mean 49603.957174 211.529248 444.395715 3.560307e-01\n",
"std 32415.296519 156.399517 411.081790 4.324582e-01\n",
"min 1.000000 0.000000 0.000000 1.461840e-07\n",
"25% 25174.000000 97.000000 55.000000 5.364858e-02\n",
"50% 36148.000000 191.000000 340.000000 6.512935e-02\n",
"75% 78196.000000 287.000000 802.000000 1.000000e+00\n",
"max 120939.000000 1195.000000 1279.000000 1.000000e+00"
]
},
"execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df.describe()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Pare totul in regula. Sa vedem cum sta treaba si cu celelalte fisiere care descriu acelasi event. Abia acum imi dau seama ca, pentru claritate, numele dataframe-ului asociat cells n-ar fi trebuit denumit df, ci eventual df_cells, ca sa-l deosebesc de alelalte. In python e simplu:"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"df_cells = df"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"Acum pot crea dataframe-uri si pentru celelalte fisiere, fara stresul ca am sa le incurc:"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"df_hits = pd.read_csv('/Users/dan/Desktop/train_100_events/event000001000-hits.csv')\n",
"df_particles = pd.read_csv('/Users/dan/Desktop/train_100_events/event000001000-particles.csv')\n",
"df_truth = pd.read_csv('/Users/dan/Desktop/train_100_events/event000001000-truth.csv')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Le-a incarcat si pe-astea fara eroare, hai sa le inspectam pe rand:"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>hit_id</th>\n",
" <th>x</th>\n",
" <th>y</th>\n",
" <th>z</th>\n",
" <th>volume_id</th>\n",
" <th>layer_id</th>\n",
" <th>module_id</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>-64.4099</td>\n",
" <td>-7.163700</td>\n",
" <td>-1502.5</td>\n",
" <td>7</td>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2</td>\n",
" <td>-55.3361</td>\n",
" <td>0.635342</td>\n",
" <td>-1502.5</td>\n",
" <td>7</td>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>3</td>\n",
" <td>-83.8305</td>\n",
" <td>-1.143010</td>\n",
" <td>-1502.5</td>\n",
" <td>7</td>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>4</td>\n",
" <td>-96.1091</td>\n",
" <td>-8.241030</td>\n",
" <td>-1502.5</td>\n",
" <td>7</td>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>5</td>\n",
" <td>-62.6736</td>\n",
" <td>-9.371200</td>\n",
" <td>-1502.5</td>\n",
" <td>7</td>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" hit_id x y z volume_id layer_id module_id\n",
"0 1 -64.4099 -7.163700 -1502.5 7 2 1\n",
"1 2 -55.3361 0.635342 -1502.5 7 2 1\n",
"2 3 -83.8305 -1.143010 -1502.5 7 2 1\n",
"3 4 -96.1091 -8.241030 -1502.5 7 2 1\n",
"4 5 -62.6736 -9.371200 -1502.5 7 2 1"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_hits.head()"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>particle_id</th>\n",
" <th>vx</th>\n",
" <th>vy</th>\n",
" <th>vz</th>\n",
" <th>px</th>\n",
" <th>py</th>\n",
" <th>pz</th>\n",
" <th>q</th>\n",
" <th>nhits</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>12258</th>\n",
" <td>968305530860736513</td>\n",
" <td>-171.641000</td>\n",
" <td>302.668000</td>\n",
" <td>-1220.00000</td>\n",
" <td>-0.110735</td>\n",
" <td>-0.058300</td>\n",
" <td>-0.137469</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12259</th>\n",
" <td>968305530860740610</td>\n",
" <td>-171.641000</td>\n",
" <td>302.668000</td>\n",
" <td>-1220.00000</td>\n",
" <td>0.000191</td>\n",
" <td>-0.169234</td>\n",
" <td>-0.248553</td>\n",
" <td>1</td>\n",
" <td>4</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12260</th>\n",
" <td>968306149319245824</td>\n",
" <td>33.448100</td>\n",
" <td>20.703400</td>\n",
" <td>-102.51500</td>\n",
" <td>0.486316</td>\n",
" <td>0.268579</td>\n",
" <td>-1.227300</td>\n",
" <td>1</td>\n",
" <td>10</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12261</th>\n",
" <td>968306218038722560</td>\n",
" <td>33.448100</td>\n",
" <td>20.703400</td>\n",
" <td>-102.51500</td>\n",
" <td>0.082110</td>\n",
" <td>0.084122</td>\n",
" <td>-0.415145</td>\n",
" <td>-1</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>12262</th>\n",
" <td>968307936025640960</td>\n",
" <td>-0.004181</td>\n",
" <td>0.004748</td>\n",
" <td>-5.12884</td>\n",
" <td>-0.158693</td>\n",
" <td>-0.093017</td>\n",
" <td>0.057719</td>\n",
" <td>1</td>\n",
" <td>2</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" particle_id vx vy vz px \\\n",
"12258 968305530860736513 -171.641000 302.668000 -1220.00000 -0.110735 \n",
"12259 968305530860740610 -171.641000 302.668000 -1220.00000 0.000191 \n",
"12260 968306149319245824 33.448100 20.703400 -102.51500 0.486316 \n",
"12261 968306218038722560 33.448100 20.703400 -102.51500 0.082110 \n",
"12262 968307936025640960 -0.004181 0.004748 -5.12884 -0.158693 \n",
"\n",
" py pz q nhits \n",
"12258 -0.058300 -0.137469 1 0 \n",
"12259 -0.169234 -0.248553 1 4 \n",
"12260 0.268579 -1.227300 1 10 \n",
"12261 0.084122 -0.415145 -1 1 \n",
"12262 -0.093017 0.057719 1 2 "
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_particles.tail()"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>hit_id</th>\n",
" <th>particle_id</th>\n",
" <th>tx</th>\n",
" <th>ty</th>\n",
" <th>tz</th>\n",
" <th>tpx</th>\n",
" <th>tpy</th>\n",
" <th>tpz</th>\n",
" <th>weight</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>120939.00000</td>\n",
" <td>1.209390e+05</td>\n",
" <td>120939.000000</td>\n",
" <td>120939.000000</td>\n",
" <td>120939.000000</td>\n",
" <td>120939.000000</td>\n",
" <td>120939.000000</td>\n",
" <td>120939.000000</td>\n",
" <td>120939.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>60470.00000</td>\n",
" <td>4.103431e+17</td>\n",
" <td>-1.767838</td>\n",
" <td>4.754221</td>\n",
" <td>-2.310578</td>\n",
" <td>-528.416285</td>\n",
" <td>437.340825</td>\n",
" <td>-17.349051</td>\n",
" <td>0.000008</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>34912.22644</td>\n",
" <td>3.231682e+17</td>\n",
" <td>305.710368</td>\n",
" <td>305.167921</td>\n",
" <td>1061.912935</td>\n",
" <td>188079.857254</td>\n",
" <td>189808.318372</td>\n",
" <td>272779.304898</td>\n",
" <td>0.000008</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>1.00000</td>\n",
" <td>0.000000e+00</td>\n",
" <td>-1024.840000</td>\n",
" <td>-1025.100000</td>\n",
" <td>-2955.500000</td>\n",
" <td>-999841.000000</td>\n",
" <td>-999861.000000</td>\n",
" <td>-1000000.000000</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td>30235.50000</td>\n",
" <td>1.035873e+17</td>\n",
" <td>-100.142000</td>\n",
" <td>-95.873300</td>\n",
" <td>-654.862000</td>\n",
" <td>-0.329628</td>\n",
" <td>-0.309521</td>\n",
" <td>-2.038540</td>\n",
" <td>0.000004</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>60470.00000</td>\n",
" <td>3.648081e+17</td>\n",
" <td>-1.651420</td>\n",
" <td>1.012140</td>\n",
" <td>-1.759190</td>\n",
" <td>-0.006623</td>\n",
" <td>0.006257</td>\n",
" <td>-0.007396</td>\n",
" <td>0.000007</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td>90704.50000</td>\n",
" <td>7.115699e+17</td>\n",
" <td>97.251550</td>\n",
" <td>103.222000</td>\n",
" <td>655.110500</td>\n",
" <td>0.308269</td>\n",
" <td>0.329653</td>\n",
" <td>2.038135</td>\n",
" <td>0.000011</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>120939.00000</td>\n",
" <td>9.683079e+17</td>\n",
" <td>1025.350000</td>\n",
" <td>1024.850000</td>\n",
" <td>2955.500000</td>\n",
" <td>999910.000000</td>\n",
" <td>999798.000000</td>\n",
" <td>1000000.000000</td>\n",
" <td>0.000165</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" hit_id particle_id tx ty \\\n",
"count 120939.00000 1.209390e+05 120939.000000 120939.000000 \n",
"mean 60470.00000 4.103431e+17 -1.767838 4.754221 \n",
"std 34912.22644 3.231682e+17 305.710368 305.167921 \n",
"min 1.00000 0.000000e+00 -1024.840000 -1025.100000 \n",
"25% 30235.50000 1.035873e+17 -100.142000 -95.873300 \n",
"50% 60470.00000 3.648081e+17 -1.651420 1.012140 \n",
"75% 90704.50000 7.115699e+17 97.251550 103.222000 \n",
"max 120939.00000 9.683079e+17 1025.350000 1024.850000 \n",
"\n",
" tz tpx tpy tpz \\\n",
"count 120939.000000 120939.000000 120939.000000 120939.000000 \n",
"mean -2.310578 -528.416285 437.340825 -17.349051 \n",
"std 1061.912935 188079.857254 189808.318372 272779.304898 \n",
"min -2955.500000 -999841.000000 -999861.000000 -1000000.000000 \n",
"25% -654.862000 -0.329628 -0.309521 -2.038540 \n",
"50% -1.759190 -0.006623 0.006257 -0.007396 \n",
"75% 655.110500 0.308269 0.329653 2.038135 \n",
"max 2955.500000 999910.000000 999798.000000 1000000.000000 \n",
"\n",
" weight \n",
"count 120939.000000 \n",
"mean 0.000008 \n",
"std 0.000008 \n",
"min 0.000000 \n",
"25% 0.000004 \n",
"50% 0.000007 \n",
"75% 0.000011 \n",
"max 0.000165 "
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_truth.describe()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Hai sa vedem cum arata chestiile astea si sub forma de grafice. Sunt fan matplotlib, desi cred ca o s-o virez spre seaborn. Dar nu azi. Azi doar ma joc."
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x112715e48>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"fig = plt.figure()\n",
"plt.plot(df_hits.x, df_hits.y)\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Habar n-am ce inseamna asta, vad doar niste zone albe care mie-mi sugereaza niste salturi. Cuantice sau nu, vedem data viitoare. Pana atunci ar trebui sa rasfoiesc niste cursuri din facultate, adica alea de fizica particulelor elementare, uitate intr-un colt pe noptiera :) I'll be back!\n",
"Pana atunci, sper sa remarcati si voi ca jupytoer notebbok si python fac echipa buna. Enjoy!"
]
}
],
"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.6.4"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment