Skip to content

Instantly share code, notes, and snippets.

@gdetrez
Created April 26, 2016 15:50
Show Gist options
  • Save gdetrez/463ee4cd129448fa9e7d405a9873a044 to your computer and use it in GitHub Desktop.
Save gdetrez/463ee4cd129448fa9e7d405a9873a044 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"metadata": {
"name": "",
"signature": "sha256:5f918713e821dcc23e5dd73a180de914fccd86143a7f6fd9632be6aed8b1c37a"
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "heading",
"level": 1,
"metadata": {},
"source": [
"Statistics of the gf-dev mailing list"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"%matplotlib inline\n",
"import pandas as pd\n",
"import sqlite3"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 1
},
{
"cell_type": "heading",
"level": 2,
"metadata": {},
"source": [
"Subscribers"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The file `gf-dev.csv` has been downloaded from Google groups manage interface (accessed 2015-08-26 13:30)."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"members = pd.read_csv('gf-dev.csv', skiprows=1, header=True, usecols=[0,6,7], names=['email', 'year', 'month'])\n",
"members.info()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"<class 'pandas.core.frame.DataFrame'>\n",
"Int64Index: 180 entries, 0 to 179\n",
"Data columns (total 3 columns):\n",
"email 180 non-null object\n",
"year 180 non-null int64\n",
"month 180 non-null int64\n",
"dtypes: int64(2), object(1)\n",
"memory usage: 5.6+ KB\n"
]
}
],
"prompt_number": 2
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"new_subscribers_per_month = members.groupby(['year', 'month'])['email'].count()\n",
"new_subscribers_per_month.index = new_subscribers_per_month.index.map(lambda i: \"%d-%02d\" % i)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 3
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"There is missing row in this set (months with no new subscribers), we need to complete the index"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"months = [ \"%d-%02d\" % (y,m) for y in range(2009,2016) for m in range(1 if y > 2009 else 10,13 if y < 2015 else 9)]\n",
"new_subscribers_per_month = new_subscribers_per_month.reindex(months, fill_value=0)\n",
"new_subscribers_per_month.head()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 4,
"text": [
"2009-10 6\n",
"2009-11 0\n",
"2009-12 3\n",
"2010-01 3\n",
"2010-02 8\n",
"Name: email, dtype: int64"
]
}
],
"prompt_number": 4
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"cumulative_subscribers_per_month = new_subscribers_per_month.cumsum()"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 5
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"cumulative_subscribers_per_month.plot()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 6,
"text": [
"<matplotlib.axes._subplots.AxesSubplot at 0x7fb8ebfb3bd0>"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAYYAAAEACAYAAAC3adEgAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XeYVPXZxvHvI2JFKRJBLIivoKLYQlGjMiIa7L7R2CvW\nkIhGo0I0ukZUwBJJgvpaQBMVJWpQrNRBLIgixAKKGFCKrGCwg7Ds8/7xO4uzm2XL7Mycmdn7c11c\nnDlzZs7N7jLPnl875u6IiIhU2CDuACIikl9UGEREpBIVBhERqUSFQUREKlFhEBGRSlQYRESkkhoL\ng5mNMLNSM3s3Zd/eZjbNzGaa2Ztm1i3luYFm9pGZfWBmh2czuIiIZEdtVwwjgT5V9g0Frnf3fYDr\noseYWWfgZKBz9Jq7zExXJCIiBabGD253nwqsqLK7HGgebbcAFkfbxwGj3H2Nuy8A5gHdMxdVRERy\nYcM0XnMZ8JKZ3UYoLPtH+9sB01KOWwRs27B4IiKSa+k09fQDLnP3HYDfAiNqOFbrbYiIFJh0rhjO\ncvf+0fYTwP3R9mJg+5TjtuPHZqZ1zEzFQkQkDe5uuThPOlcMS8ysZ7TdC5gbbT8DnGJmG5lZB6Aj\nML26N3D3gv1z/fXXx55B+ePPofyF96cQsr/4otOmjXPzzc7SpZWfy6UarxjMbBTQE2htZgsJo5Au\nAIaZ2YbASuBCAHefbWajgdlAGdDPc/2vEREpQOXlcNNNcM89MHo0HHxwvHlqLAzufup6nuq6nuNv\nBm5uaCgRkcZixQo480z46it46y3YZpu4E2nmc70lEom4IzSI8sdL+eOTj9lnzoSuXaFTJ5g0KT+K\nAoDlurXHzNTCJCKN3siRcNVVMHw4nHRS7cebGZ6jzud0RiWJiEiaVq2C/v1h6lSYMgU6d4470X9T\nU5KISI7Mnw8HHhj6FaZPz8+iACoMIiJZV1oKl10GP/0pnHZaGHm0xRZxp1o/FQYRkSxZsQJ+//tw\nZeAOs2fD5ZeD5aSnIH0qDCIiGfbNN3DjjdCxIyxbFkYfDRsGbdvGnaxuVBhERDJk5Uq4/XbYeWf4\n8EN4/XW47z7YYYe4k9WPRiWJiDTQ2rVw771h9nL37jBxIuyxR9yp0qfCICLSAOXlcNFF8N57MGZM\nmLBW6FQYRETS5B7mJMyZAxMmQLNmcSfKDBUGEZE0uIeZy2+8UVxFAVQYRETScv31MG4cTJ4MzZvX\nfnwhUWEQEamnwYPhiScgmYRWreJOk3laRE9EpB5mzICjjw5/t2uXu/PmchE9FQYRkTpyh0MPDauh\nXnxxbs+dy8JQ4wQ3MxthZqVm9m6V/ZeY2Rwze8/MhqTsH2hmH5nZB2Z2eLZCi4jE4YUX4LPP4Pzz\n406SXbX1MYwE/gL8rWKHmR0CHAvs6e5rzOwn0f7OwMlAZ2BbYIKZdXL38qwkFxHJobKyMAppyBDY\nsMh7Z2u8YnD3qcCKKrt/Bdzi7muiY5ZF+48DRrn7GndfAMwDumc2rohIPB58ELbaCo45Ju4k2ZfO\nWkkdgYPNbJqZJc2sYp5fO2BRynGLCFcOIiIF7bvvwvDU227L/5VRMyGdC6INgZbuvp+ZdQNGAzut\n59hqe5lLSkrWbScSiby8F6uISIXbb4eDD4Zu3XJ3zmQySTKZzN0JU9Q6KsnMdgTGunuX6PELwGB3\nnxI9ngfsB5wP4O6Do/0vAte7+xtV3k+jkkSkYCxdCrvvDm+9BR06xJcjb0YlrccYoBeAmXUCNnL3\n5cAzwClmtpGZdSA0OU3PWFIRkRhcey2cc068RSHXamxKMrNRQE9gKzNbCFwHjABGRENYVwNnAbj7\nbDMbDcwGyoB+ujQQkUL22GNhdvOMGXEnyS1NcBMRqcbs2dCzZ1ggb6+94k6T/01JIiJF7Ztv4IQT\nYOjQ/CgKuaYrBhGRFO5w6qmwxRbhtpz5IpdXDEU+f09EpH7++leYOxdeey3uJPFRYRARAb78Ep59\nFm68EaZNg002iTtRfFQYRKRRKiuDiRNh0qTw58MP4YAD4PHHYaf1TdltJNTHICKNztKlcPLJ8O23\nYe2jQw+FHj1go43iTrZ+6mMQEcmSV16BU04JS2dfdx1soLGZ/0WFQUQaBXcYNgxuuSWslHrEEXEn\nyl8qDCJS9FatCstazJ0bOpYb0/IW6VBhEJGitno1nHhiGGX06quw6aZxJ8p/KgwiUrTKyuC006BJ\nExg1Cpo2jTtRYVBhEJGitHYtnH12GHn09NMqCvWhwiAiRae8HC66CJYsgeeeg403jjtRYVFhEJGi\nsWYNvPkm3HMPfPwxvPQSbLZZ3KkKj0bwikhBmzcP7rgDjjoKWreGX/8att4ann8emjWLO11h0sxn\nESlI8+fDDTeEpqITTwyzlxOJUByKUd7cj8HMRphZaXS3tqrPXWFm5WbWKmXfQDP7yMw+MLPDsxFY\nRBq3JUugXz/o2hXat4ePPoK77w7FoViLQq7V1pQ0EuhTdaeZbQ8cBnySsq8zcDLQOXrNXWampioR\nyYhly+CKK2CPPWDzzcOidzfcAC1axJ2s+NT4we3uU4EV1Tx1B3BVlX3HAaPcfY27LwDmAd0zEVJE\nGq8vv4Q//AF23TXMYH7vPbj1Vl0dZFO9f6M3s+OARe7+TpWn2gGLUh4vArZtQDYRacS+/RZuvhk6\ndoTFi2HGDBg+HNq1iztZ8avXcFUz2wz4PaEZad3uGl5SbS9zSUnJuu1EIkEikahPDBEpYqtWheGm\ngweHzuRXXoFddok7Ve4lk0mSyWQs5651VJKZ7QiMdfcuZtYFmAB8Hz29HbAY6AGcC+Dug6PXvQhc\n7+5vVHk/jUoSkf+yejWMHAmDBsG++4Y7qe25Z9yp8kfe3o/B3d8F2lQ8NrP5wE/d/T9m9gzwqJnd\nQWhC6ghMz2RYESlOb74Z1jTq0AGefBK6q3cyVrUNVx0FvAZ0MrOFZnZulUPW/erv7rOB0cBs4AWg\nny4NRKQm7nDvvWFy2uDBMG6cikI+0AQ3EYnFypVhPsKbb4arhMbYj1AfeTPBTUQkG/79bzjgAPjh\nh3DjHBWF/KLCICI5tXQpHHxwuKPaI49oPaN8pKYkEcmZsjI47LBQGG64Ie40hSWXTUkqDCKSMwMG\nwMyZYeXTJk3iTlNY8na4qohIup5+Otxec8YMFYV8pysGEcm6jz+G/feHsWOhR4+40xQmjUoSkaKx\nciWccAJcf72KQqHQFYOIZFXfvmH9o0ceAcvJ77vFSX0MIlIUHnggzFOYPl1FoZDoikFEsmLmTDj8\ncJg6NdxLQRpGfQwiUtBWrAi32hw+XEWhEOmKQUQyqrwcjj8edtoJ7rwz7jTFQ30MIlKwhgyB5cvh\niSfiTiLpUmEQkXpzDxPW/vY3WLPmx/3l5fD222HF1I02ii+fNIwKg4jUmXu4Z8K114aCcPnl0LJl\n5WN23x222y6efJIZKgwiUquyMpgyJSx8t2wZ/PGPYdLaBhq+UpRqLAxmNgI4Cvjc3btE+24FjgZW\nAx8D57r7V9FzA4G+wFqgv7uPy2J2EcmS8nJ47z2YNAkmTgxDTtu3D1cIp58OG+pXyqJW46gkMzsI\n+Bb4W0phOAyY6O7lZjYYwN0HmFln4FGgG+GezxOATu5eXuU9NSpJJM+4h/WMJk4MxWDyZGjeHHr1\ngkMPhUQCtt467pSNW96MSnL3qWa2Y5V941MevgGcEG0fB4xy9zXAAjObB3QHpmUsrYhkzOLFoQhU\n/CkrC0XgiCPg1lthhx3iTihxaegFYV9gVLTdjspFYBHhykFE8sAXX4QrgYpCsGwZHHJIKAYDBkCn\nTlq2QoK0C4OZXQOsdvdHazis2jajkpKSdduJRIJEIpFuDBFZD3cYPz6MIpo4MTQVHXhgaB664ALY\nay91HuezZDJJMpmM5dy1znyOmpLGVvQxRPvOAS4ADnX3VdG+AQDuPjh6/CJwvbu/UeX91McgkmXf\nfgsXXgizZsGpp4argm7doGnTuJNJuvKmj6E6ZtYHuBLoWVEUIs8Aj5rZHYQmpI7A9IykFJE6mzsX\nfvGLUAhmzIBNN407kRSaGi8kzWwU8Bqwi5ktNLO+wF+AZsB4M5tpZncBuPtsYDQwG3gB6KdLA5Hc\neuqp0FzUvz+MGKGiIOnRInoiRcAdrrkGHn0U/vGPcLUgxSWvm5JEJL+4w9VXh5FGb70FrVvHnUgK\nnQqDSIErKYGXXgpDUVu1ijuNFAMVBpECNnhwaDpKJlUUJHNUGEQK1LBh4Z7KU6ZouQrJLBUGkQLj\nDn/+c7g72pQp0K5d3Imk2KgwiBSQ77+Hiy+GmTNDZ7PWM5Js0IR4kQIxbx7sv3+4Ypg2DTp0iDuR\nFCsVBpEC8MwzcMABcNFF4Xaam28edyIpZmpKEsljn34a7pY2blwoDvvtF3ciaQx0xSCSh5YuDcta\n7LMPtGkD//qXioLkjgqDSB754oswi7lzZ2jSBObMgZtugpYt404mjYkKg0ge+PrrMIN5l13gq6/g\nnXfgT3/S/ASJhwqDSIy+/x6GDoWdd4b582H6dLjnHthuu7iTSWOmzmeRGPzwA9x3H9x8M/zsZ2Gi\n2m67xZ1KJFBhEMmhsjJ46KEw0qhLF3juudDBLJJPaiwMZjYCOAr4vOLWnmbWCngcaA8sAE5y9y+j\n5wYCfYG1QH93H5e96CL5YflyGD0aystrPm7lSrj3Xth+exg1KsxLEMlHNd6ox8wOAr4F/pZSGIYC\ny919qJldDbR09wFm1hl4FOhGuLXnBKCTu5dXeU/dqEeKRlkZ9O4NW2wB7dvXfKwZHH98uP+ySH3l\nzY163H2qme1YZfexQM9o+yEgCQwAjgNGufsaYIGZzQO6A9MymFckr1xzDWy8MYwZE4aXihSDdPoY\n2rh7abRdCrSJtttRuQgsIlw5iBSlMWPgscdgxgwVBSkuDep8dnc3s5rahdRmJEVp3jy48EIYO1a3\n0pTik05hKDWztu6+1My2AT6P9i8Gtk85brto338pKSlZt51IJEgkEmnEEInHypVw4olw3XXQo0fc\naaRYJZNJkslkLOeusfMZIOpjGFul8/kLdx9iZgOAFlU6n7vzY+fzzlV7mtX5LIWsvBzOOy/MQ3jk\nkdChLJILedP5bGajCB3Nrc1sIXAdMBgYbWbnEQ1XBXD32WY2GpgNlAH9VAGkWLjD88/DtdfCZpvB\nSy+pKEjxqvWKIeMn1BWDFJhJk0JB+PpruPHGMORURUFyLW+uGEQas88+g3PPhY8/hhtugJNP1ugj\naRy0iJ5INaZOha5dwz0QZs+G005TUZDGQ1cMIinc4c47YfDgsKZRnz5xJxLJPRUGaZTcw3IWqb77\nLtxTed48eOMN2HHHWKKJxE5NSdJofPopPPggnHVWWMhu003DCKOKP1tvDVtuCa++qqIgjZtGJUlR\nW7Uq3Phm+HD48kvo1evHPzvvrNFFUjg0KkmkgVavhpEjYdAg2HffMBmta1fYQNfIIrVSYZCC9s47\n8MknlfctWQJDhoQrgiefhO7d48kmUqhUGKRgPfdcmGdQdb2izTYLVws9e1b/OhGpmQqDFKQJE0JR\nePZZXRGIZJoKgxScl1+GU0+Fp55SURDJBnXFSUGZNi0sef3YY3DQQXGnESlOumKQ2K1eHfoLVq+u\n+bjvvoMBA8JcBN03WSR7VBgkVosWhSuADTYIk85qM2IEHHlk9nOJNGYqDBKbSZPg9NPh0kvhqqs0\nx0AkX6gwSM65h3kGw4bBww+rWUgk36RdGMzst8B5gAPvAucCmwOPA+2J7u7m7l82PKYUgyVLYPJk\n+Pvfw/IUb74J220XdyoRqSqttZLMbFtgKrCbu/9gZo8DzwO7A8vdfaiZXQ20dPcBVV6rtZKKwH/+\nA2PHhnsg12TtWpg1CyZOhM8/h0QCeveGvn1h441zElWkKBTKWkkbApuZ2VpgM2AJMJBwj2iAh4Ak\nMKDaV0vBmjEjdBjvtRe0bFn78Z07h7WK9tpLN7sRKQRpFQZ3X2xmtwOfAiuBl9x9vJm1cffS6LBS\noE2GckqeuP9+GDgQ7roLfvnLuNOISDakVRjMrCVwLLAj8BXwDzM7I/UYd3czU5tRkVi5En7zG3j9\n9XDby113jTuRiGRLuk1JvYH57v4FgJk9BewPLDWztu6+1My2AT6v7sUlJSXrthOJBIlEIs0Ykguv\nvgqXXAIdO8L06dCsWdyJRIpfMpkkmUzGcu50O5+7AyOAbsAq4EFgOmE00hfuPsTMBgAt1PlcuGbM\ngGuvhTlz4IYbwp3PdGMbkXjkfeezu083syeAt4Gy6O97gS2A0WZ2HtFw1QzllBx6/3247rrQbHTN\nNTBmjEYQiTQmurWnrDNvHpSUwLhxcOWV8Otfh3sbiEj8cnnFoEUIhIUL4YILYL/9oFOnUCCuvFJF\nQaSxUmFoxMrKQh/C3ntD69Ywd25oQtpyy7iTiUictFZSI1VaGm52s+GGoU+hbdu4E4lIvtAVQyP0\n+uvQtSv87GfwwgsqCiJSma4YGhF3GD4cbrwRHngAjj467kQiko9UGBqJ776DCy8MzUavvQb/8z9x\nJxKRfKWmpEZg7lzo0QOaNg3NSCoKIlITFYYi99RToS/hkktg5EjYdNO4E4lIvlNTUpEqLw+roD72\nGDz/PHTrFnciESkUKgxF6tFHYfz4sN5R69ZxpxGRQqIlMYpQeTnssUe4p/Jhh8WdRkQyQUtiSIP8\n859haezeveNOIiKFSIWhyLjDTTeFpS60RLaIpEOFoci8+GJYA0mT10QkXSoMRcQdBg0K91DYQN9Z\nEUmTPj6KyJQpsHw5nHhi3ElEpJClXRjMrIWZPWFmc8xstpn1MLNWZjbezOaa2Tgza5HJsFKzQYNg\nwABo0iTuJCJSyBpyxTAMeN7ddwP2BD4ABgDj3b0TMDF6LDkwbVq4wc4ZZ8SdREQKXVrzGMysOTDT\n3Xeqsv8DoKe7l5pZWyDp7rtWOUbzGLLgmGPgiCOgX7+4k4hINhTCPIYOwDIzG2lmb5vZfWa2OdDG\n3UujY0qBNhlJKTV6/XWYNQv69o07iYgUg3SXxNgQ2Bf4jbu/aWZ3UqXZyN3dzKq9NCgpKVm3nUgk\nSCQSacYQd7jiitC/sMkmcacRkUxJJpMkk8lYzp1uU1Jb4HV37xA9PhAYCOwEHOLuS81sG2CympKy\n68knw413ZsxQp7NIMcv7piR3XwosNLNO0a7ewPvAWODsaN/ZwJgGJ5T1Wr06jEK69VYVBRHJnIas\nrnoJ8IiZbQR8DJwLNAFGm9l5wALgpAYnlPX6v/8LN93RQnkikklaXbVAffUVdOoUltbec8+404hI\ntuV9U5LEb/BgOOooFQURyTxdMRSghQth773hnXdg223jTiMiuaArBlmv8nK4/HL41a9UFEQkO3Rr\nzwLiDv37w5Il8OCDcacRkWKlwlAg3OGqq+CNN2DCBNh887gTiUixUmEoECUlMG4cTJ4MzZvHnUZE\nipkKQwEYPBhGjw73W2jVKu40IlLsVBjy1OefQzIJzz0Hr74KL78MW28ddyoRaQw0KimPLFgAv/1t\nmJvQsSP8/e9hWOorr0C7dnGnE5HGQvMY8sTzz8O558J558Gxx0LXrrChrudEJJLLeQz66InZ2rXw\nxz/CAw+ElVIPPDDuRCLS2KkwxOiLL+D002HVKnjrLWjbNu5EIiLqY4jN8uWhuahLlzAvQUVBRPKF\n+hhi0r9/mLT2l7/EnURECkEu+xhUGGLw0UdwwAEwZw60bh13GhEpBFpEr8gNHBju06yiICL5qEGF\nwcyamNlMMxsbPW5lZuPNbK6ZjTOzFpmJWTxeew2mT4dLL407iYhI9Rp6xXApMBuoaBsaAIx3907A\nxOixRNzhd7+DQYNg003jTiMiUr20C4OZbQccCdwPVLR7HQs8FG0/BBzfoHRF5sknYeVKOOOMuJOI\niKxfQ+Yx/Am4EtgyZV8bdy+NtkuBNg14/6KyejUMGAD33AMbqGdHRPJYWoXBzI4GPnf3mWaWqO4Y\nd3czq3b4UUlJybrtRCJBIlHtWxSssjL47rvK+x54IKx/1Lt3PJlEpLAkk0mSyWQs505ruKqZ3Qyc\nCZQBmxCuGp4CugEJd19qZtsAk9191yqvLerhqsuWQa9e8MknYCkDyzbbLNxPoUuX+LKJSOEqqHkM\nZtYT+J27H2NmQ4Ev3H2ImQ0AWrj7gCrHF21hWLEiFIUjj4Sbboo7jYgUk0Kcx1DxST8YOMzM5gK9\noseNwtdfQ58+cMghYdSRiEih0sznDPjuu1AUunSB4cMrNyGJiGRCQTUl1fuERVYYVq6EY46BHXaA\n++/XiCMRyQ4VhgKxejX87/9C8+bhbmtNmsSdSESKlQpDAVizBk4+OWw//jg0bRpvHhEpbrqDW55b\nuxbOOgt++AH++U8VBREpLioM9VReDuefH+YrPPssbLRR3IlERDJLhWE93GHhwtCPkOr22+Hjj+GF\nF2CTTeLJJiKSTSoMKRYsgEmTYOLE8DfA5ptXPqZTp3ClUHW/iEixaNSdz6WlMHnyj4Xg22/DzOVe\nveDQQ6FDB81JEJH8oFFJWeQOw4aFOQeLF0PPnqEQHHII7LGHCoGI5CeNSsqSr76Cc86BJUvCaqdd\nu2rugYhIVY1mnu6770K3btCuHbz8MvTooaIgIlKdRlEYHnkkNBf94Q9hLaONN447kYhI/ir6pqRB\ng+DBB0MH8557xp1GRCT/FXVhuO02ePhhePVVaKObjIqI1EnRFoa//hXuvjv0J6goiIjUXVEWhvvv\nD1cLU6bAttvGnUZEpLCk1flsZtub2WQze9/M3jOz/tH+VmY23szmmtk4M2uR2bi1e/hhKCmBCROg\nfftcn11EpPClNcHNzNoCbd19lpk1A2YAxwPnAsvdfaiZXQ20zNU9nxcuDB3NY8eGotC5c8ZPISIS\nm7y/57O7L3X3WdH2t8AcYFvgWOCh6LCHCMUiq0pL4bLLYK+9oGXLMF9BRUFEJH0NnsdgZjsC+wBv\nAG3cvTR6qhTIarfvoEGhCLjD7NkweDBstVU2zygiUvwa1PkcNSM9CVzq7t9YykJD7u5mVm2bUUlJ\nybrtRCJBIpGo97mnTYP77oOZM8P9lkVEikkymSSZTMZy7rQX0TOzpsCzwAvufme07wMg4e5LzWwb\nYLK771rldRnpYzjmGDjiCOjXr8FvJSKS9/K+j8HCpcEDwOyKohB5Bjg72j4bGNOweNWbNQtmzIC+\nfbPx7iIijVu6o5IOBF4G3gEq3mAgMB0YDewALABOcvcvq7y2wVcMJ50UFsG74ooGvY2ISMHQ/Rhq\n8MEHcPDB8O9/Q7NmGQwmIpLH8r4pKU633AL9+6soiIhkS0EtiTF/frjf8scfx51ERKR4FdQVw5Ah\ncPHF0CLnC22IiDQeBdPHsHgxdOkCH34IP/lJFoKJiOQxdT5XUV4O558frhTuuCNLwURE8lguC0Pe\n9zGsWAFnnhn+fvrpuNOIiBS/vO5jmDULunaFnXeGZBJat447kYhI8cvbwvDgg3DYYXDTTXDnndC0\nadyJREQah7xrSlq1Ci69NNx9LZmE3XePO5GISOOSV1cMn3wCBx0Ey5fD9OkqCiIiccibwjBuXFj/\n6JRT4IknYMst404kItI4xdKUNG9e5cejRsHdd8Pjj0PPnnEkEhGRCrEUhj59Kj/u2BHeegvatYsj\njYiIpCqICW4iIo2dVlcVEZHYZLwwmFkfM/vAzD4ys6sz/f4iIpJdGS0MZtYE+CvQB+gMnGpmu2Xy\nHHGL6+bcmaL88VL++BRy9lzL9BVDd2Ceuy9w9zXAY8BxGT5HrAr9h0v546X88Snk7LmW6cKwLbAw\n5fGiaJ+IiBSITBcGDTcSESlwGR2uamb7ASXu3id6PBAod/chKceoeIiIpKEgb9RjZhsCHwKHAkuA\n6cCp7j4nYycREZGsyujMZ3cvM7PfAC8BTYAHVBRERApLzmc+i4hInnP3Gv8A2wOTgfeB94D+0f5W\nwHhgLjAOaJHymoHAR8AHwOEp+08G/hW9z+AaznkT8CnwTZX9GwOPR+89DWif6fzR/snAN8BfqrzX\nT4F3o/MPq+Gc1R4H7BC999vR1+GIHOev9uta1/zRcyelZHkkV/mBTYHngDnR+9ySTv7o+ROAcmDf\nHH/9XwRmRe9zN7BBPX9+Lo9y/AuYAOyQp/nX9/+3XvkzmT3lPZ8B3q3hnPn62ZMkfJ7OjP60rufP\nTr0+e2r8h0Vv2BbYO9puRuhD2A0YClwV7b+a6IOeMLFtFtAU2BGYBxiwFfAJsFV03INAr/Wcs3t0\n3qrfnH7AXdH2ycBjWci/GfAz4KJqvjnTge7R9vNAn/Wcs9rjgHuBi6Lt3YD5Oc5f7de1Hvk7Rj9Y\nzaPH1f5wZiM/oTD0jLabAi/X9+sfPd4ieu1r1K0wZPLr3yxl+wng5Hp+/RPAJtH2xeT+57+u+df3\n/7de+TOZPXr+F8AjwDs1nDNfP3sm1/HnNSOfPbUWhmpOPAboTahebVK+AB9E2wOBq1OOfxHYD+gG\nTEjZfyYwvJZzVf3mvAj0iLY3BJZlOn/KcedQ+YNpG2BOyuNTgHuqef/1Hgfck/IDsT/wSq7y1/R1\nrUf+oUDf+mbOdP7o+TuB8+qTP+V1R0b/0X4a09e/KeE311/WN3/K/n1i/PlZb/56/JzVO39DshM+\nmKcSPhTXe8WwvuzE+NkT7av157WW/7v1+uyp1zwGM9sx+oa+Ef3DSqOnSoE20XY7wsS2CouifR8B\nu5hZ+2j00vGES636WDeBzt3LgK/MrFWG81fwas6d+u9aTPWT92o6rgQ4w8wWEppFLqlr9gzkr6ua\n8nckfA9fMbPXzezn9XnjTOU3sxbAMcDE+uQ3s32Bbd39+drOka38ZvZSdPzXwJP1yV/FeYTfCOss\nR/nrql75M5D9RuA24Pv6Bo3E+dlT4SEzm2lm19aQMSOfPXUuDGbWjPCDcKm7f5P6nIcyVON/Mnf/\nEvgVoZ3uZWA+sLau52+ohubPkNOAke6+PeG31ofr+sI8yd8U2BnoCZwK3Gdmzevywkzlj36pGEVo\nP11Q1+D591dgAAAC/klEQVRmZsAdwO9Sd9fj9RnJ7+4/J/xmtwnQq67nr5LlDGBf4NZ6vKZg8zc0\nu5ntDezk7k9Tj+95pmToa3+6u+8BHAQcZGZn1jNGvT576lQYzKwp4R/2d3cfE+0uNbO20fPbAJ9H\n+xdT+Upgu2gf7v6su+/n7gcQOl4+NLMNzGxWVAlLaomymNCJUvEB0dzd/5Ph/DWde7sq/65F1eRf\nVN1x0XZfYDSAu08DNjGz1jnKv773blKP/AuBse6+NvpQnksoFLnMfy/wobv/uZ75twB2B5JmNp/Q\nvPlMdBWRy/y4+w/A08Bxdfz5WZySpTfwe+BYD+uR1SrH+WvLUq/8Gcq+H9A1+r5PBTqZ2aQC+uzB\n3ZdEf38LPAp0z+ZnT62FIfpN6wFgtrvfmfLUM8DZ0fbZhPaziv2nmNlGZtaB0PwwPXqvraO/WxKu\nHu5393J339vd93H3klripJ7zRKpvSmho/nUvTX3g7p8BX5tZj+g9zwSerprf3ZdWd1z0Np8S2hiJ\nVp3dxN2X5yL/+kQf8nXNP4bQgUj0Q9UJ+Heu8pvZIGBL4Lf1ze/uX7v7T9y9g7t3IIwsOcbd385F\nfjPbPPoQqPhgOZrQHlyXn58x0ev2IbQVH1Pbz01c+WvJUq/8Gfy/e4+7bxt93w8E5rp7r0L57Il+\n+WkdbTclNKO+m9XPHq+9w+RAwtC+Wfw4VKoPYWjVBKofrvp7wmikD4Cfp+x/lDB0633gpBrOOZTw\n22lZ9Pd10f6NCVWvYsjYjlnKvwD4gjBsbCGwa7S/YijYPODPNZyz2uMIHV+vpGTpneP81X5d65o/\neu726Pv3Tk3fw0znJ/z2Ux6du+J9qu0Ir8v3ibqP8shU/q0JvyD9K8o2jNqHq1b9+RkPfJaSY0ye\n5l/f/9965c9A9k+JfvZTnt+Rmkcl5d1nD2G00lv8ONT/T0Rz0LL12aMJbiIiUolu7SkiIpWoMIiI\nSCUqDCIiUokKg4iIVKLCICIilagwiIhIJSoMIiJSiQqDiIhU8v8jYR9XJFTGTQAAAABJRU5ErkJg\ngg==\n",
"text": [
"<matplotlib.figure.Figure at 0x7fb8ebfa3e50>"
]
}
],
"prompt_number": 6
},
{
"cell_type": "heading",
"level": 2,
"metadata": {},
"source": [
"Messages"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"A custome script has been developed to scrape the google groups website and get all message in a mailbox. The script is `scraper.py` and uses the excellent scrapy framework. It is run like this:\n",
"\n",
" scrapy runspider scraper.py -s DOWNLOAD_DELAY=2\n",
" \n",
"Where we set the parameter DOWNLOAD_DELAY to to seconds to avoid being banned by google.\n",
"\n",
"This should create the file gf-dev.mbox with all message from the mailing list. This is then indexed using mlstats like this:\n",
"\n",
" mlstats --db-driver=sqlite --db-name=gf-dev.db gf-dev.mbox"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This is the database that will be used now to get some statistics on messages and senders."
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"con = sqlite3.connect(\"gf-dev.db\")"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 7
},
{
"cell_type": "code",
"collapsed": true,
"input": [
"Q = \"\"\"\n",
"SELECT STRFTIME(\"%Y-%m\",messages.first_date) as month, COUNT(*) as messages\n",
"FROM messages\n",
"GROUP BY strftime(\"%Y-%m\", messages.first_date);\n",
"\"\"\"\n",
"messages = pd.read_sql_query(Q, con).set_index(['month']).messages.reindex(months, fill_value=0)\n",
"messages.head()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 8,
"text": [
"month\n",
"2009-10 28\n",
"2009-11 1\n",
"2009-12 19\n",
"2010-01 32\n",
"2010-02 59\n",
"Name: messages, dtype: int64"
]
}
],
"prompt_number": 8
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"messages.plot(kind=\"bar\")"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 9,
"text": [
"<matplotlib.axes._subplots.AxesSubplot at 0x7fb8ebcb6f90>"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "iVBORw0KGgoAAAANSUhEUgAAAXUAAAEuCAYAAABxtIL8AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3X28JFV95/HP1xnwIaDDaHZ4GHQMkRWMD2Akuj5wVVTi\nSxHjLsqqK6vZXWWjBjfqYPald9ysC7rGqFk06oIToyT4sEQTVCYs16hxRWV4GhgGkREGmAERI6DA\njPPbP85ppqZv9b11q6v6dtf9vl+vft2uc8+p/p2qur97urrqtCICMzPrhgctdgBmZtYcJ3Uzsw5x\nUjcz6xAndTOzDnFSNzPrECd1M7MOmTOpSzpb0g5JVxbKPiDpGkmXS/qSpEcUfne6pOskbZb0wjYD\nNzOz2eYbqZ8DHN9XdiHwhIh4MrAFOB1A0pHAK4Ejc5uzJPmdgJnZCM2ZdCPim8CdfWUbImJ3Xvwu\nsDo/fxlwbkTsjIitwA+BY5oN18zM5jLsSPr1wAX5+cHAtsLvtgGHDLl+MzNbgNpJXdIfA/dHxOfm\nqOY5CMzMRmh5nUaSTgFeDDy/UHwzcGhheXUu62/rRG9mVkNEaL46Cx6pSzoeeDvwsoi4t/CrLwOv\nkrSvpMcCjwMuGRAYEcF73vOeB54PKqtSp8l2jsExOAbHMI4xVDXnSF3SucCxwKMk3QS8h3S1y77A\nBkkA34mIUyPiaknnAVcDu4BTYyGRmJnZ0OZM6hFxcknx2XPUfx/wvmGDMjOzepZNT0+P9AXXrVs3\nXXzNNWvWzKrTX1alTpPtFrouSaxbt45vfOMbrFu3joX2r4kY2mjnGByDYxifGHJuWTfrl3006jMk\nkjp3Viadhur1SQs6/2VmVoUkoo0PSs3MbHw5qZuZdYiTuplZhzipm5l1iJO6mVmHOKmbmXWIk7qZ\nWYc4qZuZdYiTuplZhzipm5l1iJO6mVmHOKmbmXWIk7qZWYc4qZuZdYiTuplZhzipm5l1iJO6mVmH\nOKmbmXWIk7qZWYc4qZuZdYiTuplZhzipm5l1iJO6mVmHOKmbmXWIk7qZWYc4qZuZdcicSV3S2ZJ2\nSLqyULZS0gZJWyRdKGlF4XenS7pO0mZJL2wzcDMzm22+kfo5wPF9ZWuBDRFxOHBRXkbSkcArgSNz\nm7Mk+Z2AmdkIzZl0I+KbwJ19xScA6/Pz9cCJ+fnLgHMjYmdEbAV+CBzTXKhmZjafOiPpVRGxIz/f\nAazKzw8GthXqbQMOGSI2MzNboKFOj0READFXlWHWb2ZmC7O8Rpsdkg6MiO2SDgJuy+U3A4cW6q3O\nZbNMT08/8HxqaoqpqakaYZiZddfMzAwzMzMLbqc02J6jgrQG+EpEPDEvvx+4IyLOlLQWWBERa/MH\npZ8jnUc/BPgH4Dej7wUk9RdNPEnseVMiutY/M1t8kogIzVdvzpG6pHOBY4FHSboJeDdwBnCepDcA\nW4GTACLiaknnAVcDu4BTO5e9zczG3Lwj9cZf0CN1M7MFqzpS93XkZmYd4qRuZtYhTupmZh3ipG5m\n1iFO6mZmHeKkbmbWIU7qZmYd4qRuZtYhTupmZh3ipG5m1iFO6mZmHVJn6t2JlOZnSTw3i5l11RIb\nqTuZm1m3LbGkbmbWbU7qZmYd4qRuZtYhTupmZh3ipG5m1iFO6mZmHeKkbmbWIU7qZmYd4qRuZtYh\nTupmZh3ipG5m1iFO6mZmHeKkbmbWIU7qZmYd4qRuZtYhTupmZh1SO6lLOk3SVZKulPQ5SQ+WtFLS\nBklbJF0oaUWTwZqZ2dxqJXVJhwBvBp4aEU8ElgGvAtYCGyLicOCivGxmZiMyzOmX5cDDJC0HHgbc\nApwArM+/Xw+cOFx4Zma2ELWSekTcDHwQuJGUzH8WERuAVRGxI1fbAaxqJEozM6uk7umXA0ij8jXA\nwcB+kl5TrBMRgb/p2cxspJbXbHcccENE3AEg6UvAM4Dtkg6MiO2SDgJuK2s8PT39wPOpqSmmpqZq\nhmFm1k0zMzPMzMwsuJ3SgHqBjaRjgLOBpwH3Ap8GLgEeA9wREWdKWgusiIi1fW2jzmsOSxLpjYNo\n+vX3rJtW1m9mJomI0Hz1ao3UI+ISSV8ALgV25Z+fAPYHzpP0BmArcFKd9ZuZWT21RupDvaBH6mZm\nC1Z1pO47Ss3MOsRJ3cysQ5zUzcw6pO4ljTYB0rn+PXyu36z7PFLvPN8DZraUOKmbmXWIk7qZWYc4\nqZuZdYiTuplZhzipm5l1iC9ptIlWvGzTl2yaeaRuneBkbtbTyZG6b7oxs6WqwyN133RjZktPh5O6\nmdnS46RuZtYhTupmZh3ipG5m1iGdvPrFJo+vNzdrhkfqNkaczM2G5aRuZtYhTupmZh3ipG5m1iFO\n6mZmHeKkbmbWIU7qZmYd4qRuZtYhTupmZh1SO6lLWiHpC5KukXS1pN+RtFLSBklbJF0oaUWTwZqZ\n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\n",
"text": [
"<matplotlib.figure.Figure at 0x7fb8ebcfe190>"
]
}
],
"prompt_number": 9
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"print \"Mean:\", messages.mean(), \"messages/months\"\n",
"print \"Max:\", messages.max(), \"messages/months\", \"(\", messages.argmax() ,\")\""
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Mean: 29.0422535211 messages/months\n",
"Max: 118 messages/months ( 2010-09 )\n"
]
}
],
"prompt_number": 10
},
{
"cell_type": "heading",
"level": 2,
"metadata": {},
"source": [
"Posters"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"Q = \"\"\"SELECT STRFTIME(\"%Y-%m\",messages.first_date) as month, COUNT(DISTINCT messages_people.email_address) as posters\n",
"FROM messages, messages_people \n",
"WHERE messages.message_id=messages_people.message_id \n",
"GROUP BY strftime(\"%Y-%m\", messages.first_date);\n",
"\"\"\"\n",
"posters = pd.read_sql_query(Q, con).set_index(['month']).posters.reindex(months)\n",
"posters.head()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 11,
"text": [
"month\n",
"2009-10 6\n",
"2009-11 2\n",
"2009-12 11\n",
"2010-01 8\n",
"2010-02 13\n",
"Name: posters, dtype: float64"
]
}
],
"prompt_number": 11
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"posters.plot(kind='bar')"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 12,
"text": [
"<matplotlib.axes._subplots.AxesSubplot at 0x7fb8ebb38b10>"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\n",
"text": [
"<matplotlib.figure.Figure at 0x7fb8ebbb4d10>"
]
}
],
"prompt_number": 12
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"print \"Mean:\", posters.mean()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"Mean: 11.9714285714\n"
]
}
],
"prompt_number": 13
},
{
"cell_type": "heading",
"level": 2,
"metadata": {},
"source": [
"Saving it all"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"df = pd.DataFrame({'subscribers':cumulative_subscribers_per_month,'messages':messages, 'posters':posters})\n",
"df.index = df.index.map(lambda date: date + \"-01\")\n",
"df.index.name = 'month'\n",
"df.head()"
],
"language": "python",
"metadata": {},
"outputs": [
{
"html": [
"<div style=\"max-width:1500px;overflow:auto;\">\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>messages</th>\n",
" <th>posters</th>\n",
" <th>subscribers</th>\n",
" </tr>\n",
" <tr>\n",
" <th>month</th>\n",
" <th></th>\n",
" <th></th>\n",
" <th></th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>2009-10-01</th>\n",
" <td>28</td>\n",
" <td>6</td>\n",
" <td>6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2009-11-01</th>\n",
" <td>1</td>\n",
" <td>2</td>\n",
" <td>6</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2009-12-01</th>\n",
" <td>19</td>\n",
" <td>11</td>\n",
" <td>9</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2010-01-01</th>\n",
" <td>32</td>\n",
" <td>8</td>\n",
" <td>12</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2010-02-01</th>\n",
" <td>59</td>\n",
" <td>13</td>\n",
" <td>20</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"metadata": {},
"output_type": "pyout",
"prompt_number": 14,
"text": [
" messages posters subscribers\n",
"month \n",
"2009-10-01 28 6 6\n",
"2009-11-01 1 2 6\n",
"2009-12-01 19 11 9\n",
"2010-01-01 32 8 12\n",
"2010-02-01 59 13 20"
]
}
],
"prompt_number": 14
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"df.to_csv('gf-dev-stats.csv', na_rep='0')"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 15
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"df.messages.max()\n"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 16,
"text": [
"118"
]
}
],
"prompt_number": 16
}
],
"metadata": {}
}
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment