Skip to content

Instantly share code, notes, and snippets.

@TaylorOshan
Created June 4, 2016 05:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save TaylorOshan/ccac7e5489b5b2b1799bf79ef001d922 to your computer and use it in GitHub Desktop.
Save TaylorOshan/ccac7e5489b5b2b1799bf79ef001d922 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Populating the interactive namespace from numpy and matplotlib\n"
]
}
],
"source": [
"import numpy as np\n",
"import pandas as pd\n",
"from gravity import Gravity, Production, Attraction, Doubly, BaseGravity\n",
"from entropy import Unconstrained, ProductionConstrained, AttractionConstrained, DoublyConstrained\n",
"import statsmodels.formula.api as smf\n",
"from statsmodels.api import families\n",
"import matplotlib.pyplot as plt\n",
"%pylab inline\n",
"\n",
"import time \n",
"\n",
"def timeit(method):\n",
"\n",
" def timed(*args, **kw):\n",
" ts = time.time()\n",
" result = method(*args, **kw)\n",
" te = time.time()\n",
" elapsed = te-ts\n",
"\n",
" #print '%2.8f sec' % \\\n",
" #(elapsed)\n",
" return result, elapsed\n",
"\n",
" return timed"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"@timeit\n",
"def gravity(f ,o, d, o_vars, d_vars, dij, cost='exp', framework='glm'):\n",
" results = Gravity(f, o_vars, d_vars, dij, cost, framework=framework)\n",
" return results\n",
" \n",
"@timeit \n",
"def production(f ,o, d, o_vars, d_vars, dij, cost='exp', framework='glm'):\n",
" results = Production(f, o, d_vars, dij, 'exp', framework=framework)\n",
" return results\n",
"\n",
"@timeit \n",
"def attraction(f ,o, d, o_vars, d_vars, dij, cost='exp', framework='glm'):\n",
" results = Attraction(f, d, o_vars, dij, 'exp', framework=framework)\n",
" return results\n",
"\n",
"@timeit \n",
"def doubly(f ,o, d, o_vars, d_vars, dij, cost='exp', framework='glm'):\n",
" results = Doubly(f, o, d, dij, 'exp', framework=framework)\n",
" return results\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"def sim_data(n):\n",
" o = np.tile(np.arange(n),n)\n",
" d = np.repeat(np.arange(n),n)\n",
" loc_size = np.random.randint(25000,500000, n)\n",
" o_vars = np.tile(loc_size, n)\n",
" d_vars = np.repeat(loc_size, n)\n",
" dij = np.random.exponential(2500, n**2)\n",
" f = o_vars**.3*d_vars**.4*np.exp(dij*-.00005)\n",
" o = np.reshape(o, (-1,1))\n",
" d = np.reshape(d, (-1,1))\n",
" o_vars = np.reshape(o_vars, (-1,1))\n",
" d_vars = np.reshape(d_vars, (-1,1))\n",
" dij = np.reshape(dij, (-1,1))\n",
" f = np.reshape(f, (-1,1))\n",
" f = f.astype(np.int64)\n",
" return f, o, d, o_vars, d_vars, dij\n"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"def loop(func, start, stop, step, framework='glm'):\n",
" results = []\n",
" for n in np.arange(start, stop, step):\n",
" f, o, d, o_vars, d_vars, dij = sim_data(n)\n",
" out, elapsed = func(f, o, d, o_vars, d_vars, dij, 'exp', framework=framework)\n",
" print out.params[-2:]\n",
" results.append(elapsed)\n",
" return results\n",
" \n"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[ 4.00001257e-01 -5.00075026e-05]\n",
"[ 4.00002691e-01 -5.00057493e-05]\n",
"[ 4.00001649e-01 -5.00060675e-05]\n",
"[ 4.00001376e-01 -5.00058984e-05]\n",
"[ 4.00051886e-01 -5.00049596e-05]\n",
"[ 4.00044719e-01 -5.00050590e-05]\n",
"[ 4.00043934e-01 -5.00056964e-05]\n",
"[ 4.00043715e-01 -5.00050037e-05]\n",
"[ 3.00028487e-01 -5.00050902e-05]\n",
"[ 3.00033534e-01 -5.00062507e-05]\n",
"[ 3.00034197e-01 -5.00056436e-05]\n",
"[ 3.00031161e-01 -5.00054761e-05]\n",
"[ 8.75614014e+00 -5.00047571e-05]\n",
"[ 9.11029983e+00 -5.00060123e-05]\n",
"[ 8.87950504e+00 -5.00053788e-05]\n",
"[ 8.72216390e+00 -5.00056374e-05]\n"
]
}
],
"source": [
"glm_grav = loop(gravity, 50, 250, 50)\n",
"glm_prod = loop(production, 50, 250, 50)\n",
"glm_att = loop(attraction, 50, 250, 50)\n",
"glm_doub = loop(doubly, 50, 250, 50)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[ 4.00002626e-01 -5.00057094e-05]\n",
"[ 4.00000936e-01 -5.00062666e-05]\n",
"[ 4.00001444e-01 -5.00060850e-05]\n",
"[ 4.00000755e-01 -5.00061246e-05]\n",
"[ 4.00052830e-01 -5.00067562e-05]\n",
"[ 4.00045674e-01 -5.00053804e-05]\n",
"[ 4.00045399e-01 -5.00052245e-05]\n",
"[ 4.00046355e-01 -5.00055175e-05]\n",
"[ 3.00035234e-01 -5.00067417e-05]\n",
"[ 3.00032374e-01 -5.00055319e-05]"
]
}
],
"source": [
"smglm_grav = loop(gravity, 50, 250, 50, framework='sm_glm')\n",
"smglm_prod = loop(production, 50, 250, 50, framework='sm_glm')\n",
"smglm_att = loop(attraction, 50, 250, 50, framework='sm_glm')\n",
"smglm_doub = loop(doubly, 50, 250, 50, framework='sm_glm')"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"x = np.arange(50, 250, 50)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false,
"scrolled": true
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.text.Text at 0x105cb9d50>"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nIclBCCFEA5IchBBCNCDJQQghRAOSHIQQQjQgyUEI0a0lJyfj7e0trb3qkeQghLCZ+hPyAMyaNYuF\nCxda7TMjIyPZvn27cT08PJyioqIuMeRFe5LkIIToVKqrq9v0fukT0rVoQojG2fv/yPLly7X+/ftr\n3t7e2uDBg7Uvv/xSO378uObq6qo5OjpqXl5emq+vr/bee+9pzs7OmouLi+bl5aXddtttmqZpWkRE\nhLZixQpt2LBhmpubm1ZdXW1xn6bee+89bdCgQcbX9+/fr82cOVNzcHDQ3N3dNS8vL23lypXa2bNn\nNZ1Op9XU1GiapmlpaWnarbfeqvn7+2tRUVHa+++/b9znokWLtKlTp2r33nuv5u3trQ0ZMkT77bff\nOu6LbERjv3+gy2fBDv6qhehc7P1/ZNOmTVpGRoamaZr2+eefa56enlpGRoa2fv167fLLLzfbdtas\nWdrChQvNnouIiNBGjRqlpaamauXl5Y3uMzMzU9M0Tdu4caMWFhZmPHHHx8drSUlJmqZpWmRkpLZt\n2zbjvusnhyuuuEJ79NFHtYqKCu3gwYNaUFCQtn37dk3TVHJwc3PT/vvf/2p6vV6bO3euNn78+Hb9\nrlqjsd8/bUgOUqwkRHeh07XPoxXuvPNO42xp06ZNY8CAAezZs6fR4p36z+t0Oh5//HHCwsJwdXVt\ncp8A//jHP3j22We55JJLAOjfv3+LZo5LSUnh119/ZcWKFbi4uDBixAgefPBBPvzwQ+M2V1xxBZMn\nT0an0zFz5kwOHTp0gd9G5yDJQYjuQtPa59EKH374IaNGjcLPzw8/Pz+OHj1KTk7OBVUCm0412tQ+\nAVJTU+nfv/8Fx5meno6/vz+enp7G58LDw0lLSzOum84A5+HhQXl5OXq9/oI/y97JHNJCCKtKSkri\n4YcfZvv27UyYMAGdTseoUaMsTvYDjU+UY/p8U/sElUji4+Ob3U99oaGh5OXlUVxcjJeXF6Cauvbu\n3bvFx9tVyJ2DEMKqSkpK0Ol0BAYGotfrWbduHUePHkWn0xEcHExqaipVVVXG7YODgxud77m5fdZ6\n8MEHeeWVV9i/fz+aphEfH2+cczo4OJiEhASL++3Tpw+XXXYZc+fOpaKigsOHD7N27VrjVKXdiSQH\nIYRVDR48mKeeeooJEyYQEhLC0aNHufzyywG45pprGDJkCCEhIfTs2ROABx54gOPHj+Pn58eUKVMu\n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\nTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x10d145b50>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.plot(x, glm_grav, x, glm_prod, x, glm_att, x, glm_doub)\n",
"plt.legend(('unconstrained', 'production', 'attraction', 'doubly'))\n",
"plt.title('Custom GLM Framework')\n",
"plt.xlabel('Sample Size')\n",
"plt.ylabel('Seconds')"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"[<matplotlib.lines.Line2D at 0x10db8c110>,\n",
" <matplotlib.lines.Line2D at 0x10d83aed0>,\n",
" <matplotlib.lines.Line2D at 0x10db8ca10>,\n",
" <matplotlib.lines.Line2D at 0x10db87090>]"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x10d809350>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.plot(x, smglm_grav, x, smglm_prod, x, smglm_att, x, smglm_doub)\n",
"plt.legend(('unconstrained', 'production', 'attraction', 'doubly'))\n",
"plt.legend(('unconstrained', 'production', 'attraction', 'doubly'))\n",
"plt.title('Statsmodels GLM Framework')\n",
"plt.xlabel('Sample Size')\n",
"plt.ylabel('Seconds')"
]
},
{
"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 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.9"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment