{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "### Welcome to exa! Let's get started" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [], "source": [ "import pandas as pd\n", "import numpy as np\n", "import exa" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### You might be familiar with pandas" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
xy
00.00.906796
11.00.448143
22.00.105326
33.00.010824
44.00.244684
\n", "
" ], "text/plain": [ " x y\n", "0 0.0 0.906796\n", "1 1.0 0.448143\n", "2 2.0 0.105326\n", "3 3.0 0.010824\n", "4 4.0 0.244684" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = np.linspace(0, 10, 11)\n", "y = np.random.rand(11)\n", "df1 = pd.DataFrame.from_dict({'x': x, 'y': y})\n", "df1.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### DataFrames are great! Usually you can find a way to represent your data in a single dataframe" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
xyzizjzk
00.00.9067960.7331380.3969780.448463
11.00.4481430.4137190.7556600.719040
22.00.1053260.1735120.1548880.757688
33.00.0108240.7305570.7181240.229439
44.00.2446840.0558200.4283320.083746
\n", "
" ], "text/plain": [ " x y zi zj zk\n", "0 0.0 0.906796 0.733138 0.396978 0.448463\n", "1 1.0 0.448143 0.413719 0.755660 0.719040\n", "2 2.0 0.105326 0.173512 0.154888 0.757688\n", "3 3.0 0.010824 0.730557 0.718124 0.229439\n", "4 4.0 0.244684 0.055820 0.428332 0.083746" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df1 = pd.DataFrame.from_dict({'x': x, 'y': y})\n", "b = pd.DataFrame(np.random.rand(11, 3))\n", "b.columns = ['zi', 'zj', 'zk']\n", "pd.concat([df1, b], axis=1).head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Sometimes data doesn't fit nicely into a single dataframe" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " dxi dyj nx ny ox oy\n", "0 0.4 0.4 15 15 -3.0 -3.0\n" ] }, { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
f1f2
00.1265030.827317
10.3899270.768678
20.3881040.187729
30.4087510.614016
40.0112890.499478
\n", "
" ], "text/plain": [ " f1 f2\n", "0 0.126503 0.827317\n", "1 0.389927 0.768678\n", "2 0.388104 0.187729\n", "3 0.408751 0.614016\n", "4 0.011289 0.499478" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "array_params = pd.DataFrame.from_dict({'ox': [-3.0], 'oy': [-3.0], \n", " 'nx': [15], 'ny': [15],\n", " 'dxi': [0.4], 'dyj': [0.4]})\n", "array_values = pd.DataFrame.from_dict({'f1': (np.random.rand(15 * 15)),\n", " 'f2': (np.random.rand(15 * 15))})\n", "print(array_params)\n", "array_values.head()" ] }, { "cell_type": "raw", "metadata": {}, "source": [ "array_params stores the data to generate (x, y) coordinates\n", "array_values stores the data of some functions f1(x, y), f2(x, y) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### The exa Container links dataframes together with minimal effort" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": true }, "outputs": [], "source": [ "class Param(exa.DataFrame):\n", " _indices = ['param_index'] # Set as the dataframe's index\n", " \n", "class Value(exa.DataFrame):\n", " _columns = ['param_index'] # Set as a REQUIRED column in the dataframe's construction" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [], "source": [ "array_params.index.name = 'param_index'\n", "array_values['param_index'] = 0\n", "t = exa.Container(params=Param(array_params), values=Value(array_values))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### The network() method shows you a network graph of the relationships in your data" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAABMQAAAIsCAYAAAAd93UvAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3Xl4VYWhv/t37Z15JIQ5zCRBUcERUVBBBNo61bFqJ+cJ\nT8/19LQ9vT2/es95bmtv29P2tCJWbK22Vmut2mpVBlFBHHBA1CokYQpTGEIIGciws9f9w0ql4oSB\nlWS/n7/KTtba3+xQn8fXtdcOwjAMkSRJkiRJklJELOoBkiRJkiRJ0sFkEJMkSZIkSVJKMYhJkiRJ\nkiQppRjEJEmSJEmSlFIMYpIkSZIkSUopBjFJkiRJkiSlFIOYJEmSJEmSUopBTJIkSZIkSSnFICZJ\nkiRJkqSUYhCTJEmSJElSSjGISZIkSZIkKaUYxCRJkiRJkpRSDGKSJEmSJElKKQYxSZIkSZIkpRSD\nmCRJkiRJklKKQUySJEmSJEkpxSAmSZIkSZKklGIQkyRJkiRJUkoxiEmSJEmSJCmlGMQkSZIkSZKU\nUgxikiRJkiRJSikGMUmSJEmSJKUUg5gkSZIkSZJSikFMkiRJkiRJKcUgJkmSJEmSpJRiEJMkSZIk\nSVJKMYhJkiRJkiQppRjEJEmSJEmSlFIMYpIkSZIkSUopBjFJkiRJkiSlFIOYJEmSJEmSUopBTJIk\nSZIkSSnFICZJkiRJkqSUYhCTJEmSJElSSjGISZIkSZIkKaUYxCRJkiRJkpRSDGKSJEmSJElKKQYx\nSZIkSZIkpRSDmCRJkiRJklKKQUySJEmSJEkpxSAmSZIkSZKklGIQkyRJkiRJUkoxiEmSJEmSJCml\nGMQkSZIkSZKUUgxikiRJkiRJSikGMUmSJEmSJKUUg5gkSZIkSZJSikFMkiRJkiRJKcUgJkmSJEmS\npJRiEJMkSZIkSVJKMYhJkiRJkiQppRjEJEmSJEmSlFIMYpIkSZIkSUopBjFJkiRJkiSlFIOYJEmS\nJEmSUopBTJIkSZIkSSnFICZJkiRJkqSUYhCTJEmSJElSSjGISZIkSZIkKaUYxCRJkiRJkpRSDGKS\nJEmSJElKKQYxSZIkSZIkpRSDmCRJkiRJklKKQUySJEmSJEkpxSAmSZIkSZKklGIQkyRJkiRJUkox\niEmSJEmSJCmlGMQkSZIkSZKUUgxikiRJkiRJSikGMUmSJEmSJKUUg5gkSZIkSZJSikFMkiRJkiRJ\n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\nat/3Sbm6e2jvv1cp9XKiqtapr46PD1W1eg1veUwl5eLqppDW7XVo8086tXeHcrKz5OLqJkk6vW+X\ncrIyrwRi7SOs15w9vF+7vl2ihJjflZ2RIS//SqrX8h616zvQGq5dKzkhTl+Oe06S9PCYt1Xrv7PN\ntq9YpF3f/0t+gdU0aPI8a/sjWzfo19UrlHThnNy8vBVcv6Hy+lwN5ZycnBQZGamPP/5Y8+bN01//\n+tdSfzYAgIqPGWIAAAAo07799lsZhqFu3brZHK8VHKTMVEup3MOSmKBVH7yjy3HnlZeTo0tno/XD\n7Ila/u5rij15RJIpS9IlbVu2UKejdkqScnNytPL9v+r4rs3KsKTI3ctHGakWnfx1u36YM+m698tf\nVnjw57Xa9PWnykhNUV5OjmJPHtXqD6cUuafX7ZC/bDInM9M6LunqcsnAWnUVWLOuJOnSuTP6fuYE\nnTv6m3JzcuTi7i7LpQTt/88P2rr0ixveqyTLKKPWfat1/5ipS+fOyNXDQ1npaToZtVv9+vVTSkqK\ntd19990n0zS1atWqmxkuAABWBGIAAAAo0zZs2CBJatmypc3x4OpVlZtZOhurZ6WnqVXPSA2duVCd\nBw+XKVMZFosCgmvrmQ8+1+B3P7bOgDp7eL8kKSX+gioH11aVWvU0eMpHGjLtMz0wYpwkKel8jDLT\nUq97T1OmUhMT9Mirf9ewWV+p9YP9JEmWSwm6FBNdKuO6kZphzeUTUEWSdGzHL5Kk7MxM/b5/jwwZ\nCm3f2do26cI5Va/fWPXD22rozC81dMaXatn9IUlS7PEjf7iWrIx0bV/xtQwZ6j7sJT0z/Qs9M32B\ngurU1alTpzRnzhxr2xYtrswy27t3r5KTk//wvQEAjoclkwAAACizMjIylJiYKMMwVL16dZtzgYGB\ncsrJLLV7Ne/cU5IUFBJa4FgPubi5y8XNXZWq19DF308qKz1dklQpqKZ6j3pdZl6e4s+e1qm9OxR9\n4FfrtdkZ6TdczhnUMEzBDcMkSSF3t9eu7/4p6Uo4dKc0btdJe35cpugDe5SVka7f9+1STnaWnJyc\n1Ojeq0sVG7S6Vw1a3avszEzFHj+sC6eO6dzRg6VW74UTR5SdmSFDhjb/c4G2/HPBlb7TLDJNU2vX\nrtW4cVcCx/w/C6ZpKiYmRn5+fn/4/gAAx0IgBgAAgDIrMTHR+tnHx8fmnL+/v5yys0rtXh7evpIk\n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\n2bJlOn/+vKpUqaKePXtq1KhR163l8OHDmjt3rnbt2iWLxaIqVaooIiJCzz//vKpWrVpkvdLVvbnG\njx+v5cuXW2seMWKERo4cWaLncOzYMc2bN0/bt29XUlKS/Pz8FBYWpu7du6tnz56FlpEuX75cS5Ys\n0dGjR5WXl6c6derooYce0uDBg0sULC5YsMBmP7GffvpJNWrUkCSbcVy731qvXr106tQpSdI999yj\nyZMna+LEidq2bZtcXFzUoUMHjR8/XoGBgfrll180ffp0HTt2TAEBARowYICee+45mzpatGihrKws\n63McNGiQpk6dqqioKBmGoXbt2unNN99UUFBQiZ4jcNNMAAAAAMBt9fPPP5s///yzvcsok2bNmmWG\nhYWZy5cvtznepUsXMywszHzxxRfNH3/80UxJSTGPHj1qPvjgg2bTpk3NQ4cOFepr5MiRZmhoqDll\nyhTz0qVLZlpamrl06VLz2WefNUNDQ82uXbsWumbdunVm8+bNzf79+5vHjx83s7KyzJ07d5pdunQx\nO3XqZJ47d86m/bhx48ywsDDz7bfftjk+ceJEc+jQoTc19v/85z9mixYtzEGDBlnvferUKfOll14y\nQ0NDzYkTJ9q0Hzt2rBkaGmrOnTvXTExMNNPS0szly5ebLVq0MB9//HEzMzPTpv327dvN0NBQc9y4\ncYXu/eSTT5phYWFmTExMoXPFPauzZ8+aoaGhZp8+fcwhQ4aY+/fvN1NTU83vv//ebNq0qdmvXz9z\n27Zt5uTJk80LFy6Y8fHx5ujRo83Q0FDz66+/LtRffn2PP/64+cwzz5hHjx41LRaLuXLlSrNZs2Zm\n3759S/ws+Y7hZjFDDAAAAADKgLXn92n+sXVKy820dynX5eXsrv/X6D51D25xR+7XsmVL9ezZU5LU\nqFEjPf/88xo9erRWrlxps1H+999/r7Vr16pDhw4aO3as9Xjfvn118uRJbdy4sVDfiYmJeuWVVyRJ\nM2bMUPXq1SVJbdq00TvvvKNhw4bpb3/7mz788EPrNW+88YZ27dqlb775Ru3atVOPHj20fv16rVy5\nUt9++22Jx5WUlKSXX35ZHh4emjt3rnVvv3r16mnq1Kk6cOCATfslS5Zo1apVeuSRRzR8+HDr8cjI\nSMXHx+u9997TtGnTNG7cuBLXcKuOHj2qSZMmqWnTppKkBx54QCtXrtTGjRs1d+5cLViwwNp2/Pjx\n+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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "t.network()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### There are idx-col and col-col relationships, as well as other class attributes\n", "\n", "#### Categories are efficient if your data has a small number of possible values but normally require special attention\n", "#### with the _categories attribute, they require no special attention" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": true }, "outputs": [], "source": [ "class CatDF(exa.DataFrame):\n", " _categories = {'cat1': str, 'cat2': np.int64}" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "cat1 category\n", "cat2 category\n", "dtype: object\n" ] }, { "data": { "text/html": [ "
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
cat1cat2
0foo0
1foo0
2foo0
3foo0
4foo0
\n", "
" ], "text/plain": [ " cat1 cat2\n", "0 foo 0\n", "1 foo 0\n", "2 foo 0\n", "3 foo 0\n", "4 foo 0" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Note that the pandas API remains intact\n", "c = CatDF.from_dict({'cat1': ['foo'] * 30 + ['bar'] * 40, 'cat2': [0] * 18 + [1] * 13 + [2] * 39})\n", "print(c.dtypes)\n", "c.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### There are attributes for _groupbys, _traits, _precision allowing for automatic passing to JS widgets" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": true }, "outputs": [], "source": [ "class TraitDF(exa.DataFrame):\n", " _traits = ['f1', 'f2']\n", " _precision = {'f1': 8, 'f2': 3}" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [], "source": [ "tr = exa.Container(values=TraitDF(array_values))" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tr" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "False" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tr._traits_need_update" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "'[0.827,0.769,0.188,0.614,0.499,0.942,0.252,0.173,0.374,0.207,0.317,0.549,0.169,0.607,0.351,0.854,0.048,0.446,0.617,0.891,0.029,0.556,0.621,0.812,0.36,0.154,0.902,0.821,0.876,0.497,0.479,0.839,0.643,0.222,0.472,0.586,0.115,0.821,0.232,0.959,0.237,0.722,0.679,0.496,0.865,0.893,0.529,0.856,0.272,0.66,0.935,0.275,0.604,0.399,0.334,0.656,0.771,0.044,0.758,0.725,0.508,0.408,0.129,0.102,0.687,0.735,0.221,0.119,0.19,0.049,0.2,0.217,0.716,0.297,0.085,0.025,0.163,0.537,0.628,0.815,0.58,0.154,0.24,0.93,0.275,0.935,0.669,0.125,0.925,0.357,0.314,0.449,0.556,0.062,0.37,0.472,0.969,0.867,0.291,0.233,0.09,0.826,0.157,0.411,0.228,0.758,0.235,0.419,0.033,0.019,0.605,0.358,0.58,0.255,0.066,0.719,0.425,0.406,0.796,0.304,0.858,0.972,0.817,0.063,0.789,0.635,0.369,0.192,0.464,0.002,0.088,0.804,0.427,0.882,0.933,0.942,0.628,0.326,0.488,0.523,0.335,0.852,0.222,0.38,0.233,0.457,0.866,0.409,0.03,0.342,0.558,0.991,0.148,0.987,0.646,0.544,0.553,0.827,0.467,0.654,0.477,0.101,0.35,0.364,0.193,0.265,0.875,0.925,0.219,0.936,0.098,0.771,0.797,0.994,0.919,0.9,0.518,0.167,0.937,0.186,0.019,0.273,0.239,0.893,0.283,0.343,0.806,0.207,0.514,0.027,0.818,0.51,0.911,0.406,0.973,0.679,0.289,0.622,0.782,0.699,0.258,0.329,0.733,0.409,0.751,0.258,0.651,0.398,0.941,0.255,0.396,0.054,0.936,0.782,0.041,0.394,0.566,0.529,0.784,0.854,0.561,0.583,0.379,0.344,0.308]'" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tr._widget.traitdf_f2" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": true }, "outputs": [], "source": [ "class GroupDF(exa.DataFrame):\n", " _columns = ['f1', 'f2']\n", " _traits = ['f1', 'f2']\n", " _precision = {'f1': 2, 'f2': 2}\n", " _groupbys = ['grp']" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [], "source": [ "array_values['grp'] = np.repeat(range(15), 15)\n", "gr = exa.Container(values=GroupDF(array_values))\n", "gr._update_traits()" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "'[[0.83,0.77,0.19,0.61,0.5,0.94,0.25,0.17,0.37,0.21,0.32,0.55,0.17,0.61,0.35],[0.85,0.05,0.45,0.62,0.89,0.03,0.56,0.62,0.81,0.36,0.15,0.9,0.82,0.88,0.5],[0.48,0.84,0.64,0.22,0.47,0.59,0.11,0.82,0.23,0.96,0.24,0.72,0.68,0.5,0.87],[0.89,0.53,0.86,0.27,0.66,0.93,0.28,0.6,0.4,0.33,0.66,0.77,0.04,0.76,0.72],[0.51,0.41,0.13,0.1,0.69,0.74,0.22,0.12,0.19,0.05,0.2,0.22,0.72,0.3,0.09],[0.03,0.16,0.54,0.63,0.82,0.58,0.15,0.24,0.93,0.28,0.93,0.67,0.13,0.92,0.36],[0.31,0.45,0.56,0.06,0.37,0.47,0.97,0.87,0.29,0.23,0.09,0.83,0.16,0.41,0.23],[0.76,0.23,0.42,0.03,0.02,0.6,0.36,0.58,0.26,0.07,0.72,0.43,0.41,0.8,0.3],[0.86,0.97,0.82,0.06,0.79,0.63,0.37,0.19,0.46,0.0,0.09,0.8,0.43,0.88,0.93],[0.94,0.63,0.33,0.49,0.52,0.33,0.85,0.22,0.38,0.23,0.46,0.87,0.41,0.03,0.34],[0.56,0.99,0.15,0.99,0.65,0.54,0.55,0.83,0.47,0.65,0.48,0.1,0.35,0.36,0.19],[0.27,0.88,0.93,0.22,0.94,0.1,0.77,0.8,0.99,0.92,0.9,0.52,0.17,0.94,0.19],[0.02,0.27,0.24,0.89,0.28,0.34,0.81,0.21,0.51,0.03,0.82,0.51,0.91,0.41,0.97],[0.68,0.29,0.62,0.78,0.7,0.26,0.33,0.73,0.41,0.75,0.26,0.65,0.4,0.94,0.25],[0.4,0.05,0.94,0.78,0.04,0.39,0.57,0.53,0.78,0.85,0.56,0.58,0.38,0.34,0.31]]'" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "gr._widget.groupdf_f2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Trait data is passed to JS for viewing in a widget with a rather capable app utilizing Three.JS and WebGL" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" }, { "name": "stdout", "output_type": "stream", "text": [ "dict_keys(['type', 'app', 'content', 'data'])\n" ] } ], "source": [ "exa.Container()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### The real power is in crafting a container specific to the needs of a data set" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "### There is also an Editor class that makes repetitive file I/O tasks simpler" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ " 0: {\n", " 1: \"cells\": [\n", " 2: {\n", " 3: \"cell_type\": \"markdown\",\n", " 4: \"metadata\": {},\n", " 5: \"source\": [\n", " 6: \"### Welcome to exa! Let's get started\"\n", " 7: ]\n", " 8: },\n", " 9: {\n", " 10: \"cell_type\": \"code\",\n", " 11: \"execution_count\": 1,\n", " 12: \"metadata\": {\n", " 13: \"collapsed\": false\n", " 14: },\n", " 15: \"outputs\": [],\n", " 16: \"source\": [\n", " 17: \"import pandas as pd\\n\",\n", " 18: \"import numpy as np\\n\",\n", " 19: \"import exa\"\n", " 20: ]\n", " 21: },\n", " 22: {\n", " 23: \"cell_type\": \"markdown\",\n", " 24: \"metadata\": {},\n", " 25: \"source\": [\n", " 26: \"### You might be familiar with pandas\"\n", " 27: ]\n", " 28: },\n", " 29: {\n", "...\n", "764: \"execution_count\": null,\n", "765: \"metadata\": {\n", "766: \"collapsed\": true\n", "767: },\n", "768: \"outputs\": [],\n", "769: \"source\": []\n", "770: }\n", "771: ],\n", "772: \"metadata\": {\n", "773: \"kernelspec\": {\n", "774: \"display_name\": \"Python 3\",\n", "775: \"language\": \"python\",\n", "776: \"name\": \"python3\"\n", "777: },\n", "778: \"language_info\": {\n", "779: \"codemirror_mode\": {\n", "780: \"name\": \"ipython\",\n", "781: \"version\": 3\n", "782: },\n", "783: \"file_extension\": \".py\",\n", "784: \"mimetype\": \"text/x-python\",\n", "785: \"name\": \"python\",\n", "786: \"nbconvert_exporter\": \"python\",\n", "787: \"pygments_lexer\": \"ipython3\",\n", "788: \"version\": \"3.5.1\"\n", "789: }\n", "790: },\n", "791: \"nbformat\": 4,\n", "792: \"nbformat_minor\": 0\n", "793: }" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "s = exa.Editor('exa_demo.ipynb') # Before you run this cell, save the notebook!\n", "s" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "{'exa_demo.ipynb': OrderedDict([(733,\n", " ' \"s = exa.Editor(\\'exa_demo.ipynb\\') # Before you run this cell, save the notebook!\\\\n\",'),\n", " (747, ' \"{\\'exa_demo.ipynb\\': OrderedDict([(733,\\\\n\",'),\n", " (748,\n", " ' \" \\' \\\\\"s = exa.Editor(\\\\\\\\\\'exa_demo.ipynb\\\\\\\\\\')\\\\\\\\\\\\\\\\n\\\\\",\\'),\\\\n\",'),\n", " (749,\n", " ' \" (747, \\' \\\\\"{\\\\\\\\\\'exa_demo.ipynb\\\\\\\\\\': OrderedDict()}\\\\\"\\'),\\\\n\",'),\n", " (750,\n", " ' \" (756, \\' \\\\\"s.find(\\\\\\\\\\'exa_demo.ipynb\\\\\\\\\\')\\\\\"\\')])}\"'),\n", " (759, ' \"s.find(\\'exa_demo.ipynb\\')\"')])}" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "s.find('exa_demo.ipynb')" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "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.1" } }, "nbformat": 4, "nbformat_minor": 0 }