Skip to content

Instantly share code, notes, and snippets.

@sburns
Created March 13, 2013 15:57
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 sburns/5153499 to your computer and use it in GitHub Desktop.
Save sburns/5153499 to your computer and use it in GitHub Desktop.
A python notebook backing up a post written for [PyNash](http://pynash.org).
Display the source blob
Display the rendered blob
Raw
{
"metadata": {
"name": "dev"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Using lxml and pandas to examine PyPI package stats\n",
"\n",
"A [post](POST URL) written for [PyNash](http://pynash.org) more clearly describes this notebook. "
]
},
{
"cell_type": "code",
"collapsed": true,
"input": [
"from lxml.html import document_fromstring\n",
"import requests\n",
"import pandas as pd\n",
"from dateutil.parser import parse as dateparse\n",
"%pylab inline"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"\n",
"Welcome to pylab, a matplotlib-based Python environment [backend: module://IPython.zmq.pylab.backend_inline].\n",
"For more information, type 'help(pylab)'.\n"
]
}
],
"prompt_number": 14
},
{
"cell_type": "code",
"collapsed": true,
"input": [
"def package_versions(package_name, name_pwd):\n",
" \"\"\"\n",
" Scrape the package's pkg_edit page for all uploaded versions\n",
"\n",
" package_name: official package name\n",
" name_pwd: PyPI username, password tuple\n",
"\n",
" Returns a list of versions for the package\n",
" \"\"\"\n",
" pl = {':action': 'pkg_edit', 'name': package_name}\n",
" r = requests.get('https://pypi.python.org/pypi', params=pl, auth=name_pwd)\n",
" html = document_fromstring(r.content)\n",
" rows = html.cssselect('table.list tr')[:-1]\n",
" header = rows[0]\n",
" data = rows[1:]\n",
" version_index, _ = filter(lambda x: x[1].text_content().lower() == 'version', enumerate(header))[0]\n",
" versions = map(lambda x: x[version_index].text_content(), data)\n",
" return versions\n",
"\n",
"def package_data(package, version):\n",
" \"\"\"\n",
" Hit the official json feed for a package and version\n",
"\n",
" Return the package info and url data\n",
" \"\"\"\n",
" url = 'http://pypi.python.org/pypi/%s/%s/json' % (package, version)\n",
" data = requests.get(url).json()\n",
" metadata = data['info']\n",
" # PyPI publishes the version information as a list, we're interested in first\n",
" url_info = data['urls'][0]\n",
" return metadata, url_info\n",
"\n",
"def get_pypi_auth():\n",
" \"\"\"\n",
" Try to read ~/.pypirc and return the (username, password) tuple\n",
" \"\"\"\n",
" from ConfigParser import ConfigParser\n",
" import os\n",
" cp = ConfigParser()\n",
" cp.read(os.path.expanduser('~/.pypirc'))\n",
" name = cp.get('pypi', 'username')\n",
" passwd = cp.get('pypi', 'password')\n",
" return name, passwd\n"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 15
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Putting it all together..."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"package = 'PyCap'\n",
"versions = package_versions(package, get_pypi_auth())\n",
"data = [package_data(package, v)[1] for v in versions]\n",
"\n",
"df = pd.DataFrame(data, index=versions)\n",
"# convert upload_time\n",
"df['upload_time'] = df['upload_time'].map(dateparse)\n",
"df['elapsed'] = df['upload_time'] - df['upload_time'].shift(-1)\n",
"\n",
"def to_days(x):\n",
" days = -1\n",
" try:\n",
" days = x.days\n",
" except:\n",
" pass\n",
" return days\n",
"\n",
"df['elapsed'] = df['elapsed'].map(to_days)\n",
"# compute downloads / day\n",
"df['downloads / day'] = df['downloads'] / df['elapsed']"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 16
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"to_plot = df['downloads / day'][:-1]\n",
"mpl.rc('figure', figsize=(10, 8))\n",
"to_plot.plot(kind='bar')\n",
"plt.ylabel('Downloads Per Day')\n",
"plt.xlabel('Version')\n",
"plt.title('Downloads/day per version for %s' % package)\n",
"plt.show()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "display_data",
"png": "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\nnpOUvwAr6DgTJkzQlClT9M4772jLli1atmxZIoMk1a5dW+3atdPkyZP1/PPPH/byFWEYauXKlYnb\n27Zt08aNG1WrVi2dcMIJ6tixozZt2pT42Lp1qx599FHjsTznnHO0bt06LViwQBMnTlTfvn0l7Sso\nypUrp0WLFiWOvXnzZuXl5SWe++tzVrFiRf3jH//QN998oylTpujBBx/UjBkzDnrNQ52/mjVrGmc+\nnIKOXdjfVt2/Dfnyyy+rQ4cOOu644yTtG8c5c+bk6zc80M8//6xLLrlEN998s3744Qdt2rRJF1xw\nQb5ewEP9TB1uSxOIIwowwKL9/0jk5eVp6tSp6tOnjwYMGKBmzZqpdOnS6tWrl/7f//t/2rZtm5Yv\nX65Ro0apf//+ied37NhRjzzyiDp27ChpX1/YgbcPfA0Tffr00T333KP169dr/fr1uuuuuxKvt23b\nNpUrV06VKlXSxo0bdeeddyaeV6dOHbVp00Z/+9vftGvXLn3wwQf5mqqDINDnn3+uPXv2KDU1VWXL\nllXp0qW1fft2ffLJJ+rUqZPRcbZt26ajjz5a6enp+vHHH/WXv/zloO/hsssu08iRI/XFF1+oR48e\nh/1+33zzTc2aNUs7d+7UX//6V7Vv3161atVS165dtXjxYj3//PPatWuXdu3apU8++URfffWV8ZiW\nLVtWPXv21E033aRNmzYpOztbklSqVCldeeWVGjZsmNatWydJ+v777/X2228nPdYbb7yhpUuXKgxD\npaWlqXTp0vneydrvUOfvSK+h9uvv0eaxD+Xiiy/Wp59+qjFjxuiyyy5L3N+5c2dlZ2cnHt+9e7e2\nbt2qxx57TGPHjtWuXbu0c+dOVatWTaVKldK0adMOOZb7f6bef/99vfHGG+rZs6e17EAUKMAAiy68\n8EKlpaXphBNO0IgRI3TjjTcmmuwl6eGHH1aFChVUt25dnXnmmerXr58GDx6ceLxjx47atm1b4rfi\nfn1bOvR1vpK9W3H77berTZs2Oumkk3TSSSepTZs2uv322yVJw4YN044dO1StWjV16NBB559/fr7j\nTJgwQR9//LHS09N111135Wt+X7NmjXr27KlKlSqpadOmysrKUv/+/fXuu++qQ4cO+bauDnecyy67\nTHXq1FGtWrXUvHlztW/f/qDvpUePHlqxYkViyy+ZlJQU9e3bV3feeaeqVq2qefPmJRrBU1NT9fbb\nb2vixImqVauWjjvuON12222J3/ozvXZa37599c4776hnz575CqaRI0eqfv36ateunSpVqqTs7Ox8\nTeG/PvaSJUuUnZ2t1NRUdejQQddcc02+Inu/w52/Qx33cH79PRb22AWN2THHHKMePXooNzf3oMJ5\n0qRJuuCCC9S7d29VrlxZLVq00Keffqrs7GxVrFhRY8aMUa9evZSenq4XXngh8dum+9WoUUNVqlRR\nzZo1NWDAAD3++ONq2LCh8VgAcZAS/pb/TgPAYVxzzTVq0aKF/vCHP1g9boMGDfT4448neowOZfDg\nwapdu7buvvtuq6+NI3f33XdryZIlie1pG4Ig0IABA/JtNwM+KrJ3wC6//HJlZGSoRYsWifs2btyo\n7OxsNWzYUF26dNHmzZsTj40YMUINGjRQ48aND/vWPYD4atmyZeJ6ZbZMnjxZKSkphy2+pN+2NYui\nt3HjRj3zzDO66qqrXEcBYqnICrDBgwfrrbfeyndfTk5O4q35zp07KycnR5K0aNEivfjii1q0aJHe\neustDR06tEivRA2gaFx55ZVJf0vxSGRlZWno0KFGzfJF9SeY8Ns9+eSTOuGEE3T++efrjDPOsH58\nzjOKgyLdgszNzdWFF16ozz//XJLUuHFjzZw5UxkZGVqzZo2ysrL01VdfacSIESpVqpRuueUWSdJ5\n552n4cOHq127dkUVDQAAwJlIm/DXrl2b+N9xRkZG4ho8q1atynf9ntq1ayf9FWUAAADflXH1wgVt\nFxzqMd52BgAAPkm20RjpO2D7tx4lafXq1apevbokqVatWvl+o+W7775LelG9/RdpLOqPgQMHRvZa\n5IzPBznJGfcPX7KSk5xx/ogq5+FEWoB169ZN48aNk7Tvj/l27949cf/EiRO1c+dOLVu2TEuWLNGp\np54aZTQAAIDIFNkWZJ8+fTRz5kytX79exx9/vO666y7deuut6tWrl55++mllZmbqpZdekiQ1bdpU\nvXr1UtOmTVWmTBn97//+r/PtxszMTKevb4qcdpHTLnLa50tWctpFTrvikLPICrD9f7T216ZPn37I\n+//yl78c8s+QuJKVleU6ghFy2kVOu8hpny9ZyWkXOe2KQ05nTfgAACBe0tLStXXrJmevn5paRXl5\nG529fpT4W5AAAECS/lt8hYX4mFGo57ss/qLm1d+CTElJKfC3CgAAwJHZ13/t8t/Z4vXv/OHqFt4B\n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\n7fIlJ30WdvmSU/InKznt8iUna5M5CjAAAICIOekB27x5s6644gotXLhQKSkpGjt2rBo0aKDevXtr\n+fLlyszM1EsvvaTKlSvnD0sPGIoJ+iwAxBFrk12F6gGbMmWK9u7dazXQH//4R11wwQX68ssv9dln\nn6lx48bKyclRdna2Fi9erM6dOysnJ8fqawIAAMRFgQXYiy++qPr16+vmm2/WV199VegX3LJli95/\n/31dfvnlkqQyZcqoUqVKmjJligYOHChJGjhwoF599dVCv1ZhxGF/2AQ57fIlJ30WdvmSU/InKznt\n8iUna5O5Aguw8ePHa968eapbt64GDRqk9u3b64knntDWrVuP6AWXLVumY489VoMHD1arVq105ZVX\n6scff9TatWuVkZEhScrIyNDatWuP6PgAAABxV8bkiypVqqTf//732rFjh0aPHq3/+7//03333afr\nr79e119//W96wd27d+vTTz/VI488orZt22rYsGEHbTempKT8dx/6YIMGDVJmZqYkqXLlymrZsqWy\nsrIk/VLR2ridlZVl9XhFeXu/uORhPM1u//I/xSO5nVXI5xe/8SwpP5++3N5/X1zy+H57/31RzdfC\nri9Hflu/KW/cxnP/57m5uSpIgU34r732mp599lktWbJEl112mQYNGqTq1atr+/btatq0qdGLHGjN\nmjVq3769li1bJkn64IMPNGLECH377beaMWOGatSoodWrV6tTp04HbXnShI/igkZXAHHE2mRXoZrw\nJ0+erBtuuEFffPGFbr75ZlWvXl2SVL58eT311FO/OUyNGjV0/PHHa/HixZKk6dOnq1mzZrrwwgs1\nbtw4SdK4cePUvXv333xsmw7+30A8kdMuX3L++n+LceXLePqSU/InKznt8iUna5O5Arcg9xdFh3LO\nOecc0Ys+/PDD6tevn3bu3Kl69epp7Nix2rNnj3r16qWnn346cRkKAACA4qjALcjZs2fr+uuv16JF\ni7Rz507t2bNHFStWVF5eXlQZE9iCRHHB2/wA4oi1ya5CbUFee+21mjBhgho2bKiffvpJTz/9tIYO\nHWo9JAAAQElRYAEmSQ0aNNCePXtUunRpDR48WG+99VZR53IuDvvDJshply856bOwy5eckj9ZyWmX\nLzlZm8wV2ANWoUIF/fzzzzr55JN18803q0aNGsXq7UEAAICoFdgDlpubq4yMDO3cuVOjRo1SXl6e\n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\nVo8ePfJtR0at9PDhw4c7e/WYOO+88/Tpp5+qfv36GjNmjObOnasJEyYoNTVVDzzwgMqXL+86oiRp\n27Zt6tChw0H3H3PMMWrZsqWDRIdWqlQpVa9eXTVq1DjosTJlyui0005zkOpgmZmZ6tevn5YtW6bN\nmzcrIyNDVatW1Z/+9KdYNQ/Pnj1b5cuXV4MGDRL3ZWVlKQxDjR8/XnfccYfDdL/w5by3b99e7du3\nV4cOHXTppZeqRo0aOvroo/XDDz+oQoUKbntCfsWXcy/tO//t2rVTdna27rjjDq1evVp//OMfXcc6\nSM2aNdW/f3/NmTNHN998s3744QfddNNNrmPl48t5r1mzpo4//ngdddRRaty4ceL+b7/9VkcddZRO\nP/10h+l+kZaWpt27d+f7j2BGRoa6d++uH374wdl6z29BAgBKpFWrVmn+/Pm64IILXEdBCcRvQRbg\n8ccfdx3BiC8516xZ4zqCEcbTLl9y+nLeJcbUhpo1ayaKL1/G05eccT7vB3KZkwIMkRoyZIjrCMWK\nL+PpS06fMKZ2+TKevuREwdiC/K8vv/xSr732mr7//ntJUu3atdWtW7fYXY3fl5y+YDxLJs67fYxp\nyeTLeY9jTt4BkzRy5Ej16dNHknTaaafptNNO0969e9WnT598v9nhmi85f23JkiWaNGmSFi1a5DpK\nPr6Op7Tvyu0+iGNOn8+7tO8K83Hj85hu2LDBdQQjcczpy3mPbU5X17+Ik/r164c7d+486P6ff/45\nrFevnoNEh+ZLzo4dO4br1q0LwzAMn3vuubBBgwbhkCFDwubNm4cPPfSQ43S/8GU877777sTnCxcu\nDBs0aBBmZmaGderUCWfPnu0wWX6+5PTlvIdhGL7yyivhpEmTwkmTJiU+r169evjKK6+Er7zyiut4\nCb6M6TvvvBPWq1cvPO2008KPP/44bNiwYVi3bt2wbt264Zw5c1zHS/Alpy/nPa45KcDCMGzUqFG4\nbNmyg+5ftmxZ2LBhw+gDJeFLTl+uMO/LePpy5XZfcvpy3sPQnyvM+zKmvly53Zecvpz3uObkQqyS\nRo8erXPOOUf169dPXCdk5cqVWrJkiR555BHH6X7hS86yZcvqu+++U+3atZWampq4jtrRRx+d78J9\nrvkyngf6/vvvdf7550va9zfMtm/f7jjRocU5p0/nffbs2brlllvUtm1bXX311UpJSdHMmTM1duxY\n19Hy8WVM9+7dqxYtWkiSjjvuOJ155pmSpFatWsXuAqc+5PTlvMc1J034/7Vnzx7NmTNH33//vVJS\nUlSrVi21adNGZcrEq0b1IWcQBLrmmmt0ySWXaOPGjfr0008TV5g/77zzYnXRQx/Gs1KlSurYsaPC\nMNSHH36olStXJq7c3qJFC33xxReuI0ryJ6fkx3nfb8+ePXr44Yf12muvKScnR5deeqmWLVvmOtZB\nfBjTk08+WQsWLJAkvfrqq+revbskxe5n1Jeckh/nXYpnTgowFInNmzdrwoQJWrJkiXbt2qXjjz9e\nF110Ub6rJcNMEASJz1NSUtSqVSulpqZq7dq1mjRpkq655hp34Q7gS05fff/99xo2bJjmzp2rb7/9\n1nUcL7322ms655xzVKFChXz3f/PNN3rllVd08803O0qWny85UTgUYAAAABHjMhSIlC9XR/aFL+Pp\nS06fMKZ2+TKevuREwSjAAAAAIsYWJIpEHK867DNfxtOXnD5hTO3yZTx9yYkjxztgsC62Vx32lC/j\n6UtOnzCmdvkynr7kROHwDhisa9CggRYtWqSyZcvmu3/nzp1q2rSpli5d6iiZn3wZT19y+oQxtcuX\n8fQlJwqHd8BgXenSpRNvmx9o1apVKl26tINEfvNlPH3J6RPG1C5fxtOXnCiceF0pDcVCXK867Ctf\nxtOXnD5hTO3yZTx9yYnCYQsSRSKOVx32mS/j6UtOnzCmdvkynr7kxJGjAAMAAIgYPWAAAAARowAD\nAACIGAUYAABAxCjAAHjr7LPP1ttvv53vvtGjR2vo0KFHfMzXX39dI0eOLGw0ADgsmvABeOvJJ5/U\n7Nmz9cwzzyTua9++ve6//36dccYZh33u3r17VaoU/wcF4AarDwBvXXLJJXrjjTe0e/duSVJubq5W\nrVql7du3q0OHDmrdurV69eqlH3/8UZKUmZmpW2+9Va1bt9bLL7+sMWPGqFmzZjr55JPVt29fSdKz\nzz6r6667LnG8s88+WyeffLLOOeccrVy5UpI0aNAg/fGPf9Tpp5+uevXq6ZVXXnHw3QPwGQUYAG+l\np6fr1FNP1ZtvvilJmjhxorp06aJ7771X06dP19y5c9W6dWs9+OCDkqSUlBRVq1ZNc+fOVe/evTVy\n5EjNnz9fCxYs0GOPPZb4mv2uu+46DR48WAsWLFC/fv10/fXXJx5bs2aNZs2apalTp+rWW2+N8LsG\nUBxQgAHwWp8+fTRx4kRJ+wqw448/XosWLdLpp5+uU045Rc8995xWrFiR+PrevXsnPj/ppJPUt29f\njR8//pB/4uWjjz5KvDPWv39/ffDBB5L2FWndu3eXJDVp0kRr164tsu8PQPHEJXUBeK1bt2664YYb\nNG/ePO3YsUOtWrVSdna2JkyYcMivr1ChQuLzN954Q++9955ef/113Xvvvfr888/167bYZG2yRx11\nVIFfAwDJ8A4YAK9VrFhRnTp10uDBg9W3b1+1a9dOs2bN0jfffCNJ+vHHH7VkyZKDnheGoVasWKGs\nrCzl5ORoy5Yt2rZtW76v6dChQ+LdtfHjx+uss84q+m8IQInAO2AAvNenTx/16NFDL730kqpVq6Zn\nn31Wffr00c8//yxJuvfee9WgQYN8z9mzZ48GDBigLVu2KPz/7dyhDUAhDEDBMgGO/ZiAQZAMwKh8\nR5BfVd0pTP1LaHpOjDGi1hqllLsHttaK3nvMOaO1FnvvO//uir1vgD+coQAASOYLEgAgmQADAEgm\nwAAAkgkwAIBkAgwAIJkAAwBI9gEakfgcTD3i9gAAAABJRU5ErkJggg==\n"
}
],
"prompt_number": 17
}
],
"metadata": {}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment