Skip to content

Instantly share code, notes, and snippets.

@TaylorOshan
Created June 10, 2016 23:29
Show Gist options
  • Save TaylorOshan/042c26197b7daeb5d6b47ed025e3d460 to your computer and use it in GitHub Desktop.
Save TaylorOshan/042c26197b7daeb5d6b47ed025e3d460 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": true
},
"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",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": true
},
"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",
"\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": true
},
"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",
"\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"#copy results over from notebook in sparse branch\n",
"sp_grav = np.array([0.009379863739013672,\n",
" 0.010191917419433594,\n",
" 0.013580083847045898,\n",
" 0.02336597442626953,\n",
" 0.023818016052246094,\n",
" 0.03525900840759277,\n",
" 0.03714299201965332,\n",
" 0.047389984130859375,\n",
" 0.055455923080444336,\n",
" 0.07191991806030273,\n",
" 0.07992720603942871,\n",
" 0.10130095481872559,\n",
" 0.10898685455322266,\n",
" 0.1385822296142578,\n",
" 0.15839409828186035,\n",
" 0.18109512329101562,\n",
" 0.19623899459838867,\n",
" 0.2373828887939453,\n",
" 0.24484801292419434])\n",
"\n",
"sp_prod = np.array([0.008792877197265625,\n",
" 0.012892961502075195,\n",
" 0.018072128295898438,\n",
" 0.02672410011291504,\n",
" 0.036765098571777344,\n",
" 0.05049705505371094,\n",
" 0.06424093246459961,\n",
" 0.08189702033996582,\n",
" 0.1013631820678711,\n",
" 0.1273641586303711,\n",
" 0.15144896507263184,\n",
" 0.17901921272277832,\n",
" 0.2195439338684082,\n",
" 0.2700672149658203,\n",
" 0.2963399887084961,\n",
" 0.332568883895874,\n",
" 0.3813331127166748,\n",
" 0.44652509689331055,\n",
" 0.4651219844818115])\n",
"\n",
"sp_att = np.array([0.00892496109008789,\n",
" 0.01181483268737793,\n",
" 0.017676830291748047,\n",
" 0.025489091873168945,\n",
" 0.03578901290893555,\n",
" 0.04750704765319824,\n",
" 0.06312990188598633,\n",
" 0.07956314086914062,\n",
" 0.09888005256652832,\n",
" 0.11808300018310547,\n",
" 0.14717316627502441,\n",
" 0.175645112991333,\n",
" 0.20492291450500488,\n",
" 0.23653817176818848,\n",
" 0.2717468738555908,\n",
" 0.2954838275909424,\n",
" 0.3636939525604248,\n",
" 0.4200310707092285,\n",
" 0.43506598472595215])\n",
"\n",
"sp_doub = np.array([0.01020193099975586,\n",
" 0.015948057174682617,\n",
" 0.025825023651123047,\n",
" 0.03924298286437988,\n",
" 0.05489301681518555,\n",
" 0.08008694648742676,\n",
" 0.10814595222473145,\n",
" 0.14121484756469727,\n",
" 0.18188691139221191,\n",
" 0.2283778190612793,\n",
" 0.2879500389099121,\n",
" 0.3248469829559326,\n",
" 0.3642420768737793,\n",
" 0.44018101692199707,\n",
" 0.506378173828125,\n",
" 0.5851249694824219,\n",
" 0.6679189205169678,\n",
" 0.7664568424224854,\n",
" 0.8878300189971924])"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false,
"scrolled": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[ 4.00003765e-01 -5.00082127e-05]\n",
"[ 4.00002697e-01 -5.00066666e-05]\n",
"[ 3.99999915e-01 -5.00055984e-05]\n",
"[ 4.00000861e-01 -5.00064292e-05]\n",
"[ 4.00001140e-01 -5.00063276e-05]\n",
"[ 4.00001953e-01 -5.00062703e-05]\n",
"[ 4.00001310e-01 -5.00062954e-05]\n",
"[ 4.00000599e-01 -5.00060056e-05]\n",
"[ 4.00001176e-01 -5.00056830e-05]\n",
"[ 4.00001582e-01 -5.00061861e-05]\n",
"[ 4.00001745e-01 -5.00066448e-05]\n",
"[ 4.00001078e-01 -5.00061603e-05]\n",
"[ 4.00001357e-01 -5.00060119e-05]\n",
"[ 4.00001380e-01 -5.00057114e-05]\n",
"[ 4.00001400e-01 -5.00060612e-05]\n",
"[ 4.00001041e-01 -5.00061054e-05]\n",
"[ 4.00001420e-01 -5.00061600e-05]\n",
"[ 4.00001390e-01 -5.00061795e-05]\n",
"[ 4.00001566e-01 -5.00060298e-05]\n",
"[ 4.00044504e-01 -5.00046674e-05]\n",
"[ 4.00045068e-01 -5.00051517e-05]\n",
"[ 4.00046830e-01 -5.00051536e-05]\n",
"[ 4.00044189e-01 -5.00051428e-05]\n",
"[ 4.00047196e-01 -5.00056583e-05]\n",
"[ 4.00046735e-01 -5.00056823e-05]\n",
"[ 4.00046318e-01 -5.00055976e-05]\n",
"[ 4.00047239e-01 -5.00055579e-05]\n",
"[ 4.00046316e-01 -5.00056376e-05]\n",
"[ 4.00045989e-01 -5.00051992e-05]\n",
"[ 4.00044818e-01 -5.00054746e-05]\n",
"[ 4.00045085e-01 -5.00051760e-05]\n",
"[ 4.00045998e-01 -5.00054688e-05]\n",
"[ 4.00045219e-01 -5.00055610e-05]\n",
"[ 4.00047317e-01 -5.00056556e-05]\n",
"[ 4.00045808e-01 -5.00055909e-05]\n",
"[ 4.00045374e-01 -5.00053382e-05]\n",
"[ 4.00046947e-01 -5.00056095e-05]\n",
"[ 4.00046361e-01 -5.00056381e-05]\n",
"[ 3.00034016e-01 -5.00057525e-05]\n",
"[ 3.00033252e-01 -5.00052744e-05]\n",
"[ 3.00030145e-01 -5.00053775e-05]\n",
"[ 3.00030037e-01 -5.00047565e-05]\n",
"[ 3.00032487e-01 -5.00052466e-05]\n",
"[ 3.00032907e-01 -5.00052725e-05]\n",
"[ 3.00033558e-01 -5.00059839e-05]\n",
"[ 3.00032909e-01 -5.00053619e-05]\n",
"[ 3.00031875e-01 -5.00051895e-05]\n",
"[ 3.00032290e-01 -5.00053379e-05]\n",
"[ 3.00032978e-01 -5.00053514e-05]\n",
"[ 3.00033905e-01 -5.00054823e-05]\n",
"[ 3.00031747e-01 -5.00056422e-05]\n",
"[ 3.00032427e-01 -5.00053723e-05]\n",
"[ 3.00031778e-01 -5.00052621e-05]\n",
"[ 3.00034105e-01 -5.00057004e-05]\n",
"[ 3.00033159e-01 -5.00053856e-05]\n",
"[ 3.00033450e-01 -5.00056404e-05]\n",
"[ 3.00032449e-01 -5.00053773e-05]\n",
"[ 9.05975391e+00 -5.00058173e-05]\n",
"[ 7.89807159e+00 -5.00052349e-05]\n",
"[ 8.90961019e+00 -5.00053092e-05]\n",
"[ 8.65670296e+00 -5.00054583e-05]\n",
"[ 8.84397080e+00 -5.00052016e-05]\n",
"[ 8.47393885e+00 -5.00054873e-05]\n",
"[ 8.29266674e+00 -5.00049815e-05]\n",
"[ 8.38421867e+00 -5.00060056e-05]\n",
"[ 8.82217852e+00 -5.00054169e-05]\n",
"[ 8.88570848e+00 -5.00056774e-05]\n",
"[ 8.36139835e+00 -5.00054640e-05]\n",
"[ 8.50520290e+00 -5.00056668e-05]\n",
"[ 8.93418525e+00 -5.00053669e-05]\n",
"[ 8.65710610e+00 -5.00055227e-05]\n",
"[ 7.73443865e+00 -5.00057702e-05]\n",
"[ 8.63212583e+00 -5.00053614e-05]\n",
"[ 7.95999344e+00 -5.00053746e-05]\n",
"[ 8.69617289e+00 -5.00056379e-05]\n",
"[ 8.54361439e+00 -4.99613448e-05]\n"
]
}
],
"source": [
"grav = loop(gravity, 25, 500, 25)\n",
"prod = loop(production, 25, 500, 25)\n",
"att = loop(attraction, 25, 500, 25)\n",
"doub = loop(doubly, 25, 500, 25)"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"x = np.arange(25, 500, 25)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.text.Text at 0x10cf792d0>"
]
},
"execution_count": 12,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x10cea8550>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.plot(x, grav, x, sp_grav)\n",
"plt.legend(('dense', 'sparse'))\n",
"plt.title('Sparse vs Dense GLM Unconstrained Gravity Model')\n",
"plt.xlabel('Sample Size')\n",
"plt.ylabel('Seconds')"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.text.Text at 0x10cdc6450>"
]
},
"execution_count": 13,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x10cf670d0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.plot(x, prod, x, sp_prod)\n",
"plt.legend(('dense', 'sparse'))\n",
"plt.title('Sparse vs Dense GLM Production-Constrained Gravity Model')\n",
"plt.xlabel('Sample Size')\n",
"plt.ylabel('Seconds')"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.text.Text at 0x10d49c410>"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\niIiIZIr/D+AGSno1Y0ErAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x10cfb8910>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.plot(x, att, x, sp_att)\n",
"plt.legend(('dense', 'sparse'))\n",
"plt.title('Sparse vs Dense GLM Attraction-Constrained Gravity Model')\n",
"plt.xlabel('Sample Size')\n",
"plt.ylabel('Seconds')"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.text.Text at 0x10d49ce50>"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\nAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x10d4b1a90>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plt.plot(x, doub, x, sp_doub)\n",
"plt.legend(('dense', 'sparse'))\n",
"plt.title('Sparse vs Dense GLM Doubly-Constrained Gravity Model')\n",
"plt.xlabel('Sample Size')\n",
"plt.ylabel('Seconds')"
]
},
{
"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