Skip to content

Instantly share code, notes, and snippets.

@Uberi
Last active August 29, 2015 14:26
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 Uberi/a7816eb1bda48c4fbcc8 to your computer and use it in GitHub Desktop.
Save Uberi/a7816eb1bda48c4fbcc8 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{"nbformat_minor": 0, "cells": [{"source": "### Telemetry Analysis", "cell_type": "markdown", "metadata": {}}, {"execution_count": 140, "cell_type": "code", "source": "import ujson as json\nimport matplotlib.pyplot as plt\nimport pandas as pd\nimport numpy as np\nimport plotly.plotly as py\n\nfrom moztelemetry import get_pings, get_pings_properties, get_one_ping_per_client\n\n%pylab inline", "outputs": [{"output_type": "stream", "name": "stdout", "text": "Populating the interactive namespace from numpy and matplotlib\n"}], "metadata": {"collapsed": false, "trusted": true}}, {"source": "How many parallel workers do we have?", "cell_type": "markdown", "metadata": {}}, {"execution_count": 141, "cell_type": "code", "source": "sc.defaultParallelism", "outputs": [{"execution_count": 141, "output_type": "execute_result", "data": {"text/plain": "16"}, "metadata": {}}], "metadata": {"collapsed": false, "trusted": true}}, {"source": "Fetch all the submissions for the nightly build made on 2015-07-15 to 2015-07-25:", "cell_type": "markdown", "metadata": {}}, {"execution_count": 149, "cell_type": "code", "source": "pings = get_pings(sc, app=\"Firefox\", channel=\"nightly\", build_id=(\"20150715000000\", \"20150725999999\"), fraction=1.0)", "outputs": [], "metadata": {"collapsed": false, "trusted": true}}, {"source": "Extract the device pixels per virtual pixel setting from each ping (one per user) and filter out the unspecified values:", "cell_type": "markdown", "metadata": {}}, {"execution_count": 150, "cell_type": "code", "source": "subset = get_pings_properties(pings, [\"clientID\", \"environment/settings/userPrefs/layout.css.devPixelsPerPx\"])\nsubset = get_one_ping_per_client(subset)\nvalid_subset = subset.filter(lambda x: x['environment/settings/userPrefs/layout.css.devPixelsPerPx'] != None)", "outputs": [], "metadata": {"collapsed": false, "trusted": true}}, {"source": "What percentage of users have this setting enabled?", "cell_type": "markdown", "metadata": {}}, {"execution_count": 153, "cell_type": "code", "source": "valid_subset.first()", "outputs": [{"execution_count": 153, "output_type": "execute_result", "data": {"text/plain": "{'clientID': u'facef8c1-418b-44a2-b8bb-e6383c508b61',\n 'environment/settings/userPrefs/layout.css.devPixelsPerPx': u'1'}"}, "metadata": {}}], "metadata": {"collapsed": false, "trusted": true}}, {"execution_count": 152, "cell_type": "code", "source": "valid_count, total_count = valid_subset.count(), subset.count()\n\"{}% ({} of {})\".format(100.0 * valid_count / total_count, valid_count, total_count)", "outputs": [{"execution_count": 152, "output_type": "execute_result", "data": {"text/plain": "'0.261086171757% (196 of 75071)'"}, "metadata": {}}], "metadata": {"collapsed": false, "trusted": true}}, {"source": "Caching is fundamental as it allows for an iterative, real-time development workflow:", "cell_type": "markdown", "metadata": {}}, {"execution_count": 154, "cell_type": "code", "source": "cached = valid_subset.cache()", "outputs": [], "metadata": {"collapsed": false, "trusted": true}}, {"source": "Aggregate the settings by their value:", "cell_type": "markdown", "metadata": {}}, {"execution_count": 159, "cell_type": "code", "source": "settings = cached.map(lambda x: (x['environment/settings/userPrefs/layout.css.devPixelsPerPx'], 1)).reduceByKey(lambda a, b: a + b).collectAsMap()\nsettings", "outputs": [{"execution_count": 159, "output_type": "execute_result", "data": {"text/plain": "{u'-1': 11,\n u'-1.0': 1,\n u'0': 2,\n u'0.8': 1,\n u'0.85': 2,\n u'0.9': 1,\n u'0.92': 1,\n u'1': 55,\n u'1,8': 1,\n u'1.': 1,\n u'1.0': 28,\n u'1.00': 1,\n u'1.05': 10,\n u'1.1': 9,\n u'1.15': 2,\n u'1.2': 10,\n u'1.25': 10,\n u'1.3': 3,\n u'1.333333': 1,\n u'1.4': 6,\n u'1.5': 15,\n u'1.8': 5,\n u'1.88': 1,\n u'1.9': 1,\n u'2': 14,\n u'2.0': 4}"}, "metadata": {}}], "metadata": {"collapsed": false, "trusted": true}}, {"source": "And finally plot the data:", "cell_type": "markdown", "metadata": {}}, {"execution_count": 161, "cell_type": "code", "source": "plt.figure(figsize=(15, 7))\npairs = sorted(settings.items(), key=lambda x: x[0])\nwidth = 0.8\nplt.bar(range(len(pairs)), map(lambda x: x[1], pairs), width=width)\nax = plt.gca()\nax.set_xticks(np.arange(len(pairs)) + width/2)\nax.set_xticklabels(map(lambda x: x[0], pairs), rotation=90)\nplt.xlabel(\"layout.css.devPixelsPerPx Value\")\nplt.ylabel(\"Number of client IDs\")\nplt.show()", "outputs": [{"output_type": "display_data", "data": {"image/png": "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\nW4pawIK1Y6sFLy6eYdas4RqOS82alWSus2Yt4dguNWNWZlN0p7tfkOQbRqi3K3T3czKbQnuVA9zG\nGRbnYcvZMDObOn7q9bYzxvn89cwmFTlsw9fVsti/c2Mc29W6++TuvrC7fzuzdeJOHgL4oo1xfHft\n2bqdD01y3ySP6O6XJXlkkvuPUG87Yxzfqtdb2N/1HVj0+Zyrmq03++rMJt15b1U9ZN3Dv7GcVrGb\nTf6auGWpERasXbRa/OLiJ2c2k9TVk9wuyZm5ZNasb5xnEFjCsb0qyem5ZMasw7v7cUO9s7v7VvOs\nt5tU1ce7+4bLbsdYxji+qvr9JDfP5rNhfrS75zpD5aLr7aMtY5zPf07yE1vMhrmwn8+Rju2sJN/W\n6xYxrtmC469Mcs3u/rotnzxnIx3fmT0smFxVr+vu+6977Kxe4ALHi/5dtgr1Fvl3fQdtmfTfoqp6\nT2YfanxumCzmr5L8SXc/c1nzP7C7TX445ZhWfIhOsvi1qha5pMGij23RSxosVC1+yv+FWvTxLXoq\n6UXXW8LPy2WWn1lnrsvPLOHYnpHktpldb5sk6e53V9W9k/zSvIst4fjOW5t8ZkOAOyrJl+ZdbNHH\nt+r1suClilb8b9Gi15tl4vTEbaOqvpitF6z9qe6e9IQVw4Xkz0my6VpVPSxKOkWrfGzLUEuY8n+R\nVv34Fm2Vz+cqH1uye46vqg5Ncmh3XzDn/S70+Fa93qKt8vFV1Zsye2955rptB2d2Xf2jutslUFyK\nnrjtLXrB2oXqxS8uvqWa8/S5q3xsS/J3SQ7r7jM2PlBVb15Ce+Zt1xzfon9eRqq3yudzlY8tWcLx\nVdWB3f2V4fY1Mhv6+6F5B7jBoo9v1ettaVV+Phfo0dnQadDdF1XV8Umev5wmsZvpidtGbbJgbQ3r\nw9WKrxO3aCsSdDa1ysfG/K1IiNs1Vvn4VuHYquoRSf4gyaeT/HSSZyX5SGajJn6ou09eYvO4Albh\n5xN2Mz1x2+juczbZ/PdJ7izA7Z8FT/u/UKt8bCzUKsxYt5us8vGtwrH9fGYz+F4lyXuTHN3d5wzX\nAf1lEiFuulbh5xN2LeNrWZglTPu/MKt8bCzcr6x4vUVb5eNbhWP7Snef190fS/KxtQ9Pu/tfshrr\n4O1lq/DzCbuW4ZSXU1X9aC9pgfGpW/S0/4u0ysfG/O1jhrVbdfchU663aKt8fKt8bElSVWckOaa7\nv1pVd+nZOpupqoOSnNndK7vO5ipY9Z9P2M0Mp7ycBLgrZNHT/i/SKh8b83fdbDPD2grUW7RVPr5V\nPrYk+eEkV0ryhbUAN7hBkqcvp0lcDqv+8wm7lhDHIv1kkjdU1abT/i+tVfOxysfG/O3ZGetGssrH\nt8rHlg3Bbf32c3PZD8XYfVb65xN2M8MpWaiqOjC7YNr/MazysQGMoapumOSXk3wys56338tsgfYz\nkvzMSMsMAEyeEAcALEVVvTHJq5McluT4JC9N8meZzfR7bHc/dHmtA9i9hDgAYCmq6szuvtNw+1+7\n+0abPQbApVliAABYllp3+2UbHjtwkQ0BmBIhDgBYltdU1dWSpLt/fm1jVd0iyQeW1iqAXc5wSgAA\ngAnREwcALE1V3aOqbjvcPraqfraq7rPsdgHsZnriAIClqKqnJblXZte/vSnJt2W29th9k5zU3b+1\nxOYB7FpCHACwFFX1viR3SHJIkvOT3KC7P11VV0ny9u6+w1IbCLBLHbTsBgAAe9aXu/viJBdX1Ue6\n+9NJ0t1fqKqvLrltALuWa+IAgGX5UlVddbh99NrGqjo8iRAHsAXDKQGApaiqK3f3FzfZfu0kR3X3\n2UtoFsCuJ8QBALtGVX1dd//XstsBsJsZTgkALEVV3buqPlxVb6uqu1TVB5K8o6o+UlXftOz2AexW\neuIAgKWoqncleUySw5L8fZIHd/dbquroJM/q7m9dZvsAdiuzUwIAy3LA2nVvVfWJ7n5LknT36VV1\n2HKbBrB7GU4JACzL+vchP7d2o6oqycGLbw7ANAhxAMCy/FJVHZok3f3qddtvmuSPl9MkgN3PNXEA\nAAAToicOANh1quqHl90GgN1KiAMAAJgQIQ4A2I0uWnYDAHYr18QBALtOVX28u2+47HYA7EbWiQMA\nlqKqzt7m4SMW1hCAiRHiAIBluW6SByS5cJPH3rrgtgBMhhAHACzL3yU5rLvP2PhAVb15Ce0BmATX\nxAEAAEyI2SkBAAAmRIgDAACYECEOAABgQoQ4gBVXVZ9bYK2frKqrLKreurrnVtW19vO5X6mqM6rq\n7Kp6RVVdpaqOqapn7ef+XlpVD93m8ROq6t/W1Xzwfuz/o8Pz31VVd93h846vqj/bsO3aVXVBVR28\nxXMeU1XPvjztA2B8QhzA6lvkDFZPSnLVBdZbc0WO8X+6+87dffskX07yI939ru5+0hVoy3bt6SS/\n2913TvK9SV680x1X1YHD8392eP5Tkzxvh09/ZZL7bgjZD0vymu6+aJu2ArDLCHEAe0RVHVZVbxh6\nb95dVccN23+lqp607vt+vaqeONz+raG36N1V9fBh27FVddK673/O0MvzE0mul+RNVfXGTerffKh/\n5tCGr6+qo6rqH9f1St29qg4YepvW6v7kJvv6uqp6fVW9p6pekKTWPfaoqnr7sM8/Gvb3I1X1jHXf\ns1UP01uS3Lyq7rl2jFX1zKr6xeH2/demvh96606tqtOq6uSqOnKTdj69qt5bVWetr7/W3u4+J8nF\nQ4/Y/arqrcO5eUVVHTrs49xhP+/KLHR97fnr2ntgVb2jqu45POdpVfVr69vS3Z9N8uYk63v+HpHk\n5VX1oKp6W1WdXlWnVNV1NzmWS/Uwru/hraonD/XPqqoTNjmvAMyREAewd3whyXd39zFJ7p3kd4bt\nL07y6CSpqgMye2P/suEN+x2T3CHJtyf5rc2CSoaep+5+dpL/SHJsd99nk+/70yTP7u47JfmWJOcl\n+f4kJw+9SndIclaSOye5XnffvrvvkOQlm+zrl5P8Y3d/Q5JXJbnR0P7bJHl4krsN+/xqkkcm+ask\n373u+Y9I8vL1O6yqg5I8MMm7N9T6uSSPqKp7JXlWkscMww+fneSh3f2NQxt/fcP+vi7JQ7r7dt19\nxyS/tmG/qapvTvKV4e7PJ7nP8P/zriQ/PWzvJJ/s7mO6+y827OLBSd7d3V9J8pgkz62qb09y/yQn\nbKw3HPP3DbWvl+SWSf4hyT919127++gkf5Hkf681cd1zN/bK9bCf+yW5eXffJbP/u2Oq6ls3qQ3A\nnFjsG2DvOCDJ04Y32F9Ncr2qum53/0tV/VdV3SnJkUlO7+4Lq+oeSf6sZwuKXjD0QH1Tks9c3sJV\ndbXMgtnfJEl3f3nY/s4kLx5C0au7+6yq+kiSm1bV72e2GPTrN9nlt2YIZd392qq6MLPAcZ8kxyQ5\nraqS5CpJzuvuT9bsOrJvTvLhJLfq7rcO+7pKVa0tNv2PmYXau68V6u4vVNUTMuv1elJ3f6yqviHJ\n7ZK8YahzYGYBdr1PJfliVb0oyd8OXxna+VNV9ajMzuUjktw1yW2TvHXY3yFJ3rpuX+vDW2UWqH8h\nyQVJHj+0831V9SdJTkpy1+6+eJPz9tokfzj8fzw8yV91d1fVDavqFZn9/x+S5KObPHcr90tyv3Xn\n8NAkN8/sfAEwAiEOYO94ZJJrJzm6u79SVR9LcuXhsRcmeWySI3LJNVqdS/fErG27OJceybHfE5l0\n91uGUPmgJC+tqt/t7pdV1R0z6036kczCxuM3efrGtq05sbv/zybb/3zY1zmZXR+25gtDr90lO67L\n7PoOSf4zyfXX1X5vd99tizbUcI7vklmwfFiSHx9ur10T97vr6j0oySnd/QNb7O/z626vXRP3yk2+\n7/ZJLszs//EyhkB6cpLvySw8/tTw0LOT/HZ3/+0wJPOETZ7+tf/3ocf2kHWPPa27n79F2wGYM8Mp\nAfaOqye5YAgX90py43WPvSrJA5J8Y5LXDdvektkwwgOq6jpJvi3JO5L8a5LbVtUhVXV4ZkMz13x2\nqHMpw/VY/1ZV35UkVXWlms0CeaMk/9ndL8wsSB49DEM8cAgpv5jk6E2O5R+T/MCwrwcmuWZm4eaN\nSR42tDdVda2hxtoxPiSzIZx/vrNTllTVjTMb2njnJA8cgtkHklynhpkhq+rgqrrthucdmuTw7v77\n4fl3XHsolw2gb0ty96q62dpzq+oW2zVrk3Z+T5LDk9wzybOr6hpbPPflQ3uu291vG7ZdPZf0JD5m\ni+edm1kvZ5Icl2RtRsvXJXncumv4rr92/gEYh544gNW3di3TnyY5qareneS0JO//2jd0X1RV/5Dk\nwmH4ZLr7VVX1LZldp9ZJntzdFyTJMPTuPUk+luT0dbWen+Tkqvr37r5PzSYd+aPufleSH0zyvKr6\n1cxmgXx4ZsMin1xVF2UWAB+dWW/XS4benmQ2A2Oq6oeHdj0vya9kNiHH92c27PBfhsfePwwzfP3w\n/IuS/GiSf+3uT1XV+5LcprtP2+T8bDxna9tfmORnuvu8qnp8kpdmFnYfluT3h7B0UJLfS/K+dc+/\nWpK/qaorZxhCucm+187/J6vqMcMxXWnY/PNJPrRJ2y7T5qq6dpKnJbl3d/97VT0nw/V7mzz3DUmO\nGo5rzQlJ/nIYlvoPuSTgr2/rC4bjOTPJyUk+N7T9lOFaxH8eejA/m+RRmfVcAjCCGv5WA7CHDYHn\nXUke1t0fWXZ7AICtGU4JsMcNwwA/lOQNAhwA7H564gAAACZETxwAAMCECHEAAAATIsQBAABMiBAH\nAAAwIUIcAADAhPw/hI8iK8nsM2AAAAAASUVORK5CYII=\n", "text/plain": "<matplotlib.figure.Figure at 0x7ffcb82e7450>"}, "metadata": {}}], "metadata": {"collapsed": false, "trusted": true}}, {"source": "Some of these values are duplicated. To group settings by their numerical values, we parse the labels:", "cell_type": "markdown", "metadata": {}}, {"execution_count": 164, "cell_type": "code", "source": "plt.figure(figsize=(15, 7))\nfrom collections import defaultdict\nnumerical_settings = defaultdict(int)\nfor setting, count in settings.items():\n try: numerical_settings[float(setting)] += count\n except ValueError: pass\npairs = sorted(numerical_settings.items(), key=lambda x: x[0])\nwidth = 0.8\nplt.bar(range(len(pairs)), map(lambda x: x[1], pairs), width=width)\nax = plt.gca()\nax.set_xticks(np.arange(len(pairs)) + width/2)\nax.set_xticklabels(map(lambda x: x[0], pairs), rotation=90)\nplt.xlabel(\"layout.css.devPixelsPerPx Value\")\nplt.ylabel(\"Number of client IDs\")\nplt.show()", "outputs": [{"output_type": "display_data", "data": {"image/png": "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\n", "text/plain": "<matplotlib.figure.Figure at 0x7ffc38624f50>"}, "metadata": {}}], "metadata": {"collapsed": false, "trusted": true}}, {"execution_count": null, "cell_type": "code", "source": "", "outputs": [], "metadata": {"collapsed": true, "trusted": true}}], "nbformat": 4, "metadata": {"kernelspec": {"display_name": "Python 2", "name": "python2", "language": "python"}, "language_info": {"mimetype": "text/x-python", "nbconvert_exporter": "python", "version": "2.7.9", "name": "python", "file_extension": ".py", "pygments_lexer": "ipython2", "codemirror_mode": {"version": 2, "name": "ipython"}}}}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment