Skip to content

Instantly share code, notes, and snippets.

@cjauvin
Last active August 29, 2015 14:01
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 cjauvin/3280aa15a8522b0c004e to your computer and use it in GitHub Desktop.
Save cjauvin/3280aa15a8522b0c004e to your computer and use it in GitHub Desktop.
{
"metadata": {
"name": "",
"signature": "sha256:d87520ea2bf0a90163890ceae77de024f4e11db93872945df0017ab0b6f1189a"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "code",
"collapsed": false,
"input": [
"import numpy as np\n",
"import pandas as pd\n",
"\n",
"df = pd.read_csv('data/short_ranks.csv')\n",
"df.rename(columns={'Unnamed: 0': 'url'}, inplace=True)\n",
"df['global_rank'] = df.Global.str.replace(',', '').astype(float)\n",
"df.sort('global_rank', ascending=True, inplace=True)\n",
"df.index = range(1, len(df)+1) # index acts as the rank, so must start at 1\n",
"\n",
"# Generate url/rank pairs in two parts:\n",
"# (1) probalistically, by sampling a geometric distribution (with param p) while \n",
"# we haven't reached a certain # of visits to distinct sites (tail_cutoff)\n",
"# (2) deterministally afterward, by hitting every unvisited site once\n",
"# The two parameters in (1) must be tuned so that the total # of items returned\n",
"# by this generator roughly matches the expected throughput for a given period.\n",
"# Be CAREFUL though, because some parameter settings might cause an INFINITE LOOP! \n",
"# (I'm currently coding a is_halting(fn) test to prevent that though.. but I'm\n",
"# not done yet.. :-)\n",
"def generate_daily_traffic(tail_cutoff, p):\n",
" global df\n",
" visited_ranks = set()\n",
" n_ranks = len(df)\n",
" while len(visited_ranks) < n_ranks:\n",
" # probalistic part\n",
" if len(visited_ranks) < tail_cutoff:\n",
" rank = float('inf')\n",
" while rank >= n_ranks:\n",
" rank = np.random.geometric(p)\n",
" visited_ranks.add(rank)\n",
" yield df.ix[rank, 'url'], rank\n",
" # deterministic part, i.e. visit every unvisited site once\n",
" else:\n",
" remaining_ranks = set(df.index) - visited_ranks\n",
" for rank in remaining_ranks:\n",
" visited_ranks.add(rank)\n",
" yield df.ix[rank, 'url'], rank\n",
"\n",
"ranks = []\n",
"visited_urls = set()\n",
"# tail_cutoff and p must be tuned to get the desired distribution shape\n",
"# as well as the desired # of daily observations (our goal is ~500K here)\n",
"for url, rank in generate_daily_traffic(tail_cutoff=43500, p=0.0001):\n",
" visited_urls.add(url)\n",
" ranks.append(rank)\n",
"\n",
"assert len(visited_urls) == len(df)\n",
"print('# visited URLs =', len(visited_urls))\n",
"print('# daily observations =', len(ranks))\n",
"plt.hist(ranks, bins=100);"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"# visited URLs = 110583\n",
"# daily observations = 501953\n"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\nzc2VOJUkU6dOTU1NTY/zAwAAAFDefgeqHTt25Ac/+EGmT5+ekSNH7vb+a6+9ljfffDOnnHLKbu+d\neuqpPZ4Ztev7j86OGTMmffv2zYYNG3rMjhmz+y11p556arZu3ZrW1tYkycaNG/P+++/vtmZVVVVG\njRr1sc+sAgAAAKCM/Q5U//iP/5hXXnkl8+fP3+P7bW1tSZL6+vrd3quvr8+WLVsqVzu1tbXliCOO\nyJAhQ3rM9e/fP3V1dXn99dd7rPtxayapzO7t/MOGDeuxJgAAAADl7Veg+t3vfpcf//jH+fGPf5y6\nuro9znR1dSVJBgwYsNt7AwcO7DHT1dWV/v3773GdAQMGVOaSZNu2bb1ec2/n//CaAAAAAJS3Xw9J\n//u///sMGTIkP/jBDz52prq6Okny7rvv7vbetm3besxUV1dn+/bte1xn27Ztlblds71dc2/nP/LI\nIz9277/3wySDP3Lssg++AAAAAA5d99xzT+65554ex956661Cu+m9XgeqTZs25Wc/+1mWLFmSzZs3\nV45v27Yt27dvz//+7//mqKOOqtxat+tWuw9ra2tLXV1dqqqqkvz+NrwdO3akvb29x21+27dvz5Yt\nW3LcccdVjtXX1+/x9rxd59k1u6/zf3jNPVuSZPdnXQEAAAAc6i677LJcdlnPi2zWr1+fk08+udCO\neqfXt/i99tpr2blzZ2bPnp2vfOUrla+1a9emtbU1f/qnf5r58+fni1/8YoYOHZrnnntutzXWrl2b\nUaNGVf49evToJNlt9vnnn8/OnTt7zI4aNSrr169Pd3d3j9lnn302gwYNSmNjY5LkxBNPTL9+/XZb\nc/v27dmwYUOPNQEAAAAor9eB6hvf+EZ+8Ytf5Je//GXl6xe/+EVGjhyZP/mTP8kvf/nLXH755UmS\niy++OA899FCPK60effTRbNq0KZdccknl2Lhx43Lsscdm2bJlPc61bNmyDBo0KJMmTaoca2pqyhtv\nvJH777+/cqy9vT0rV67MhRdeWLkq6+ijj865556b5cuX55133qnM3n333ens7OxxfgAAAADK6/Ut\nfnV1dfmrv/qr3Y7feuutSZJvf/vblWPXXXddVq5cmXPOOSdz5sxJR0dHbr755px00kmZNm1aZW7g\nwIGZP39+Zs2alSlTpmTixIl56qmnsmLFiixYsCCDB//hWVBNTU05/fTTM23atLz00kupq6vL0qVL\n093dnRtvvLHHnm666aaMHTs2Z599dqZPn57NmzfnlltuyXnnnZeJEyf2/rcDAAAAwAG3Xw9J35M+\nffqkT58+PY4NHz48TzzxRObOnZtrr702AwYMyOTJk7N48eLKlU67zJw5M1VVVVm8eHEefPDBHH/8\n8VmyZElmz57dY65v375ZvXp1rr766tx2223p6urKaaedlrvuuisNDQ09ZkePHp01a9bkmmuuydy5\nc3PUUUfliiuuyMKFC//YHxcAAACAT1mf7o8+1Olz6g8PDFuXvT0k/YgjjsqOHR37nEvWJzk569at\ny5gxHroOAAAAlLGreRzKjaLXz6ACAAAAgANBoAIAAACgKIEKAAAAgKIEKgAAAACKEqgAAAAAKEqg\nAgAAAKAogQoAAACAogQqAAAAAIoSqAAAAAAoSqACAAAAoCiBCgAAAICiBCoAAAAAihKoAAAAAChK\noAIAAACgKIEKAAAAgKIEKgAAAACKEqgAAAAAKEqgAgAAAKAogQoAAACAogQqAAAAAIoSqAAAAAAo\nSqACAAAAoCiBCgAAAICiBCoAAAAAihKoAAAAAChKoAIAAACgKIEKAAAAgKIEKgAAAACKEqgAAAAA\nKEqgAgAAAKAogQoAAACAogQqAAAAAIoSqAAAAAAoSqACAAAAoKh+pTdwuGtpadnnTG1tbRoaGg7C\nbgAAAAAOPQLVAfNKkqS5ublX062trSIVAAAA8LkkUB0wnR+8Lk8yYi9zLUma09HRceC3BAAAAHAI\nEqgOuBFJxpTeBAAAAMAhy0PSAQAAAChKoAIAAACgKIEKAAAAgKIEKgAAAACKEqgAAAAAKEqgAgAA\nAKAogQoAAACAogQqAAAAAIoSqAAAAAAoSqACAAAAoCiBCgAAAICiBCoAAAAAihKoAAAAAChKoAIA\nAACgKIEKAAAAgKIEKgAAAACKEqgAAAAAKEqgAgAAAKAogQoAAACAogQqAAAAAIoSqAAAAAAoSqAC\nAAAAoCiBCgAAAICiBCoAAAAAihKoAAAAAChKoAIAAACgKIEKAAAAgKIEKgAAAACKEqgAAAAAKEqg\nAgAAAKAogQoAAACAogQqAAAAAIoSqAAAAAAoSqACAAAAoCiBCgAAAICiBCoAAAAAihKoAAAAAChK\noAIAAACgKIEKAAAAgKIEKgAAAACKEqgAAAAAKEqgAgAAAKAogQoAAACAogQqAAAAAIoSqAAAAAAo\nSqACAAAAoKh+pTfA77W0tOxzpra2Ng0NDQdhNwAAAAAHj0BV3CtJkubm5l5Nt7a2ilQAAADAYUWg\nKq7zg9flSUbsZa4lSXM6OjoO/JYAAAAADiKB6pAxIsmY0psAAAAAOOg8JB0AAACAogQqAAAAAIoS\nqAAAAAAoSqACAAAAoCiBCgAAAICiBCoAAAAAihKoAAAAAChKoAIAAACgKIEKAAAAgKIEKgAAAACK\nEqgAAAAAKEqgAgAAAKAogQoAAACAogQqAAAAAIoSqAAAAAAoSqACAAAAoCiBCgAAAICiBCoAAAAA\nihKoAAAAAChKoAIAAACgKIEKAAAAgKIEKgAAAACKEqgAAAAAKEqgAgAAAKAogQoAAACAogQqAAAA\nAIrar0D1H//xH7nkkkvy1a9+NYMGDUpdXV3Gjh2bFStW7Dbb0tKS888/P7W1tamrq8vUqVPT3t6+\nx3XvvPPOjBgxItXV1WlsbMztt9++x7m33norM2bMyNChQ1NTU5Nx48blhRde2OPs008/nTPPPDOD\nBg1KfX195syZk87Ozv35cQEAAAA4CPrtz/Arr7ySd955J3/zN3+T4447Llu3bs2qVavy3e9+N//z\nP/+T66+/PkmyefPmnHXWWTnmmGOycOHCdHR0ZNGiRdm4cWPWrl2bqqqqypp33HFHZs6cmaamplx1\n1VV58sknM3v27GzdujXz5s2rzO3cuTOTJk3Kiy++mHnz5qWuri5Lly7Nt771raxbty4nnHBCZXbD\nhg0ZP358Ro4cmVtvvTWvvvpqFi1alE2bNmX16tV/7O8MAAAAgE/RfgWqCy64IBdccEGPY7NmzcrJ\nJ5+cn/70p5VAtWDBgnR1deWFF17I8OHDkySnnXZaJkyYkJ///OeZPn16kqSrqyvXX399Jk+enHvv\nvTdJcvnll2fnzp2ZP39+ZsyYkcGDBydJVq1alWeeeSarVq3KRRddlCSZMmVKGhsbc8MNN/S4iuu6\n665LXV1dHn/88dTU1CRJvvzlL2f69Ol55JFHMmHChP3+RQEAAABwYPzRz6Dq27dvhg8f3uOqqPvu\nuy+TJ0+uxKkkGT9+fBobGyshKkkee+yxbNmyJVdeeWWPNWfNmpXOzs48/PDDlWOrVq3KsGHDKnEq\nSYYMGZIpU6bkgQceyHvvvZckefvtt7NmzZo0NzdX4lSSTJ06NTU1NT3ODwAAAEB5nyhQbd26Ne3t\n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\n8sgjmTBhwif+ZQEAAADw6ev1LX5nnHFGjziVJCeccEK+/vWv5+WXX64cu++++zJ58uRKnEqS8ePH\np7GxsRKikuSxxx7Lli1bcuWVV/ZYc9asWens7MzDDz9cObZq1aoMGzasEqeSZMiQIZkyZUoeeOCB\nvPfee0mSt99+O2vWrElzc3MlTiXJ1KlTU1NT0+P8AAAAABwa/qiHpHd3d+eNN97IkCFDkiSvvfZa\n3nzzzZxyyim7zZ566qk9nhm16/uPzo4ZMyZ9+/bNhg0besyOGTNmj2tu3bo1ra2tSZKNGzfm/fff\n323NqqqqjBo16mOfWQUAAABAOX9UoFqxYkVef/31XHrppUmStra2JEl9ff1us/X19dmyZUvlaqe2\ntrYcccQRlbi1S//+/VNXV5fXX3+9cqytre1j10xSmd3b+YcNG9ZjTQAAAAAODZ84UL388suZNWtW\nxo4dm+9973tJfv9cqSQZMGDAbvMDBw7sMdPV1ZX+/fvvce0BAwZU5pJk27ZtvV5zb+f/8JoAAAAA\nHBp6/ZD0D/vtb3+bSZMm5ZhjjsmqVavSp0+fJEl1dXWS5N13393tM9u2besxU11dne3bt+9x/W3b\ntlXmds32ds29nf/II4/sxU/3wySDP3Lssg++AAAAAA5d99xzT+65554ex956661Cu+m9/Q5U//d/\n/5cLLrggb7/9dp566qkMGzas8t6uW+t23Wr3YW1tbamrq0tVVVVldseOHWlvb+9xm9/27duzZcuW\nHHfccT3W3dPtebvOs2t2X+f/8Jofb0mS3Z93BQAAAHCou+yyy3LZZT0vslm/fn1OPvnkQjvqnf26\nxW/btm258MIL85//+Z956KGH8md/9mc93v/iF7+YoUOH5rnnntvts2vXrs2oUaMq/x49enSS7Db7\n/PPPZ+fOnT1mR40alfXr16e7u7vH7LPPPptBgwalsbExSXLiiSemX79+u625ffv2bNiwoceaAAAA\nABwaeh2oduzYkUsvvTTPPvtsVq5cmW9+85t7nLv44ovz0EMPZfPmzZVjjz76aDZt2pRLLrmkcmzc\nuHE59thjs2zZsh6fX7ZsWQYNGpRJkyZVjjU1NeWNN97I/fffXznW3t6elStX5sILL6xclXX00Ufn\n3HPPzfLly/POO+9UZu++++50dnb2OD8AAAAAh4Ze3+L3ox/9KL/61a9y4YUXpr29PcuXL+/xfnNz\n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\nZFu+fLkNHz7cHMexJ554ohHeMbRk9ennQCBgjuPYgAEDbO7cubZ8+XK74YYbrE2bNjZo0KCwOaOl\nn24461gAAAs7SURBVFt1QLV+/XpzHMcWLFgQHKusrLRzzjnHBgwY4OLKEO3eeecdO3r0aMjYtm3b\nLDEx0bxeb3BsypQplpycbDt27AiOFRcXm+M49tBDDwXHDh8+bB6Px0aMGBEyp9frtZSUFNu/f39w\nbPXq1eY4jj399NPBsT179thpp51mv/rVr0IeP3ToUOvevbsFAoHg2PLly81xHHv11Ve/56tHazB2\n7Fi7/PLLbeDAgdarV6+QY/Q1IsHBgweta9euNmrUqFPW0c+IFLfddps5jmNbt24NGb/++uvNcRw7\ncOCAmdHTaJmOHDliu3fvNjOzTZs2nTSgipT+LS0ttbi4OJs2bVrI4y+++GI744wzrLq6ul7vCyJT\nffq5qqrK1q1bF/bY2bNnm+M4VlxcHByLpn5u1QHVLbfcYnFxcSFvuJnZvHnzzHEcKy0tdWllaK3y\n8vKsd+/ewb936dLFxo4dG1Z37rnn2uWXXx78+0svvWSO49g//vGPkLp169aZ4zi2cuXK4Njo0aMt\nLS0tbM7JkydbcnJy8F+XDh48aHFxcSFnCph9/c0yNTXVCgoKvt+LRNR78803LTY21j788EO75JJL\nws6goq8RCZYsWWKO49hHH31kZmaHDh2q9Qcs+hmRorCw0BzHsb1794aMz5o1y2JjY+3w4cNmRk+j\n5du4ceNJA6pI6d/Fixeb4zjm8/lCaletWmWO43A1Tytyqn6uzfvvv2+O49iiRYuCY9HUz616D6qS\nkhJlZmYqJSUlZLxPnz6SpC1btrixLLRSZqbdu3erU6dOkqSdO3dqz5496t27d1htnz59Qq4TPvHn\n79bm5eUpJiYmpJdLSkqUl5dX65yHDx+W3++XJH3wwQc6duxY2JxxcXHKyck56XXKaN2qq6s1bdo0\nTZw4UT179gw7Tl8jUhQXF6tdu3basWOHzj33XKWmpqp9+/a68cYbg3s/0M+IJDfccIO6du2qCRMm\n6L333tOOHTu0evVqLV26VNOnT1dSUhI9jYgWSf1bUlKilJQUnXfeeWFzSvweipP7/PPPJSn4O6MU\nXf3cqgOqsrIypaWlhY2fGNu1a1dzLwmt2OOPP65du3Zp7Nixkr7uT0kn7dF9+/bp6NGjwdo2bdqE\n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\n",
"text": [
"<matplotlib.figure.Figure at 0x10c611e10>"
]
}
],
"prompt_number": 1
}
],
"metadata": {}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment