{ "metadata": { "name": "" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Inbox count by age\n", "\n", "This code generated \"Figure 4\" in [Three Years of Logging My Inbox Count](http://warkmilson.com/2015/05/15/three-years-of-logging-my-inbox-count.html#email-age).\n", "\n", "1. Run `compute_time_in_inbox_by_date_received.py` from [gmail-graphs](https://github.com/mddub/gmail-graphs) on the directory containing the JSON output files of [gmail-logger](https://github.com/mddub/gmail-logger). This will generate a JSON object which maps keys like `\"2015-04-20\"` to arrays like `[0.5, 0.5, 5.0, 17.5, 24.0, 327.0]`.\n", "\n", " ```\n", " python compute_time_in_inbox_by_date_received.py /path/to/your/json/log/files/dir/ > tenure.json\n", " ```\n", "\n", "2. Paste the following into an IPython Notebook. Set the value of `TENURE_FILE`. Change other constants as desired.\n", "\n", " (For inline graphs, start IPython Notebook with `ipython notebook --pylab inline`.)" ] }, { "cell_type": "code", "collapsed": false, "input": [ "# Some Pandas/Matplotlib initialization which I more or less blindly copied from an example ipython notebook.\n", "\n", "import pandas as pd\n", "pd.set_option('display.max_columns', 15)\n", "pd.set_option('display.width', 400)\n", "pd.set_option('display.mpl_style', 'default')\n", "rcParams['figure.figsize'] = (12, 5)\n", "import matplotlib\n", "\n", "font = {'family' : 'sans-serif',\n", " 'weight' : 'normal',\n", " 'size' : 14}\n", "\n", "matplotlib.rc('font', **font)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 1 }, { "cell_type": "code", "collapsed": false, "input": [ "# File containing the output of compute_time_in_inbox_by_date_received.py\n", "TENURE_FILE = 'tenure.json'\n", "\n", "# 'YYYY-MM-DD'. If you don't want a min/max date, set the value to None\n", "MIN_DATE = '2015-02-01'\n", "MAX_DATE = '2015-05-02'\n", "\n", "TITLE = 'Length of time a message spends in inbox, by date of arrival, 2015'\n", "\n", "RANGES = [\n", " (0, 5.99999),\n", " (6, 11.99999),\n", " (12, 23.999999),\n", " (24, 47.99999),\n", " (2*24, 4*24-0.00001),\n", " (4*24, 8*24-0.00001),\n", " (8*24, 9999999)\n", "]\n", "\n", "# \"PRGn\" from http://colorbrewer2.org/\n", "COLORS = list(reversed([[x/255. for x in c] for c in \n", " [(118,42,131),(175,141,195),(231,212,232),(247,247,247),(217,240,211),(127,191,123),(27,120,55)]\n", "]))\n", "\n", "##################\n", "\n", "import datetime\n", "from collections import defaultdict\n", "\n", "import matplotlib.patches\n", "import simplejson\n", "\n", "tenure_by_day = simplejson.loads(open(TENURE_FILE).read())\n", "\n", "index = sorted(tenure_by_day.keys())\n", "if MIN_DATE:\n", " index = [k for k in index if k >= MIN_DATE]\n", "if MAX_DATE:\n", " index = [k for k in index if k <= MAX_DATE] \n", "date_index = [datetime.datetime.strptime(k, '%Y-%m-%d') for k in index]\n", "\n", "# Create a data series (x is date, y is count) for each of the ranges (0-6 hours, 6-12 hours, etc.)\n", "series_by_range = defaultdict(list)\n", "for d, tenures in [(k, tenure_by_day[k]) for k in index]:\n", " for r in RANGES:\n", " series_by_range[r].append(\n", " sum([r[0] <= tenure <= r[1] for tenure in tenures])\n", " )\n", "\n", "# Transform the above into proportions, so proportions_by_range[(0, 5.999999)][i] is the\n", "# proportion of all email received on date_index[i] which stayed in the inbox for 0-6 hours.\n", "# (There is certainly a better way to do this using Pandas...)\n", "proportions_by_range = defaultdict(list)\n", "for i in range(len(index)):\n", " total = sum(series_by_range[r][i] for r in series_by_range.keys())\n", " for r in series_by_range.keys():\n", " proportions_by_range[r].append(series_by_range[r][i] / float(total))\n", "\n", "# Make a Pandas DataFrame out of the series\n", "df = pd.DataFrame(data=proportions_by_range, index=date_index)\n", "# Resample as daily so that the index includes days without data\n", "resampled = df.resample('D')\n", "# If resampling added dates to the index that weren't there before, some dates are missing data\n", "has_missing_data = any(set(resampled.index) - set(df.index))\n", "# Plot as stacked bar\n", "ax = resampled.plot(kind='bar', stacked=True, figsize=(12, 3), width=0.8, linewidth=0, color=COLORS, edgecolor=[(0.6,) * 3])\n", "\n", "# x axis\n", "ax.xaxis.grid(False)\n", "ax.xaxis.set_ticklabels([d.strftime('%b %d') if d.day in (1, 15) else \"\" for d in resampled.index], rotation=90, size=12)\n", "\n", "# y axis\n", "yticks = [0, .25, .5, .75, 1]\n", "ax.yaxis.set_ticks(yticks)\n", "ax.yaxis.set_ticklabels([\"%s%%\" % int(y * 100) for y in yticks], size=12)\n", "ax.yaxis.grid(None)\n", "ax.set_ybound(0, 1)\n", "\n", "# Legend labels\n", "def format_range_name(r):\n", " if r[0] < 24:\n", " return \"%s-%s hours\" % (r[0], int(round(r[1])))\n", " elif r[1] == 9999999:\n", " return \"%s+ days\" % (r[0] / 24)\n", " else:\n", " return \"%s-%s days\" % (r[0] / 24, int(round(r[1] / 24)))\n", "\n", "# Maybe add a \"no data\" label to the legend\n", "handles, labels = ax.get_legend_handles_labels()\n", "handles = [matplotlib.patches.Patch(alpha=0)] + handles\n", "labels = ['no data' if has_missing_data else ''] + map(format_range_name, RANGES)\n", "\n", "# The default draw order of the legend is top->bottom then left->right.\n", "# Make it go left->right then top->bottom, and reverse the labels to match the order of the graph.\n", "def cols_to_rows(arr):\n", " return reversed([arr[i] for i in (0, 4, 1, 5, 2, 6, 3, 7)])\n", "\n", "ax.legend(cols_to_rows(handles), cols_to_rows(labels),\n", " loc='lower center', fontsize=12, ncol=4, columnspacing=1, framealpha=0, bbox_to_anchor=(0.5, -0.62))\n", "\n", "# Title\n", "ax.set_title(TITLE, fontsize=14, ha='center', va='top', position=(0.5, 1.1), color='#333333')\n", "\n", "# Clean up the background and borders\n", "ax.set_axis_bgcolor('white')\n", "ax.spines['right'].set_visible(False)\n", "ax.patch.set_alpha(0)\n", "ax.figure.patch.set_alpha(0)\n", "\n", "# Add dots for dates with missing data\n", "if has_missing_data:\n", " missing_days_x = [i for i, date in enumerate(resampled.index) if date not in df.index]\n", " for m in missing_days_x:\n", " ax.text(m, 0.018, \".\", fontdict={'size': 14})\n", "\n", " # May have to tweak these coordinates to make the \"no data\" dot show in the right spot in the legend.\n", " #\n", " # The correct way would be to subclass matplotlib.patches.Patch:\n", " # http://matplotlib.org/api/patches_api.html\n", " ax.text(63.2, -0.52, \".\", fontdict={'size': 14}, zorder=99)\n", "\n", "# don't show the result of evaluating the last command\n", "pass" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "display_data", "png": "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\n", "text": [ "" ] } ], "prompt_number": 2 } ], "metadata": {} } ] }