Skip to content

Instantly share code, notes, and snippets.

@jryans
Last active August 29, 2015 14:23
Show Gist options
  • Save jryans/7c98d56e5e535f030823 to your computer and use it in GitHub Desktop.
Save jryans/7c98d56e5e535f030823 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{"nbformat_minor": 0, "cells": [{"execution_count": 3, "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\nimport datetime as dt\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}}, {"execution_count": 2, "cell_type": "code", "source": "sc.defaultParallelism", "outputs": [{"execution_count": 2, "output_type": "execute_result", "data": {"text/plain": "16"}, "metadata": {}}], "metadata": {"collapsed": false, "trusted": true}}, {"execution_count": 5, "cell_type": "code", "source": "now = dt.datetime.now()\nstart = now - dt.timedelta(7)\nend = now - dt.timedelta(1)\n\npings = get_pings(sc, \n app=\"Firefox\", \n channel=\"aurora\", \n submission_date=(start.strftime(\"%Y%m%d\"), end.strftime(\"%Y%m%d\")), \n fraction=1)", "outputs": [], "metadata": {"collapsed": false, "trusted": true}}, {"execution_count": 6, "cell_type": "code", "source": "def get_keyed_properties(pings, histogram_name):\n pings = pings.map(lambda p: json.loads(p))\n \n keys = pings.flatMap(lambda p: p.get(\"keyedHistograms\", {}).get(histogram_name, {}).keys()).distinct().collect()\n keys = filter(lambda x: \"/\" not in x, keys)\n return map(lambda k: \"keyedHistograms/{}/{}\".format(histogram_name, k), keys) + [\"clientID\"]\n \nproperties = get_keyed_properties(pings, \"DEVTOOLS_WEBIDE_CONNECTED_RUNTIME_VERSION\")", "outputs": [], "metadata": {"collapsed": false, "trusted": true}}, {"execution_count": 7, "cell_type": "code", "source": "def remove_clientid(ping):\n ping.pop(\"clientID\")\n return ping\n\nsubset = get_pings_properties(pings, properties).map(remove_clientid)", "outputs": [], "metadata": {"collapsed": false, "trusted": true}}, {"execution_count": 8, "cell_type": "code", "source": "histograms = subset.flatMap(lambda p: list(p.iteritems()))", "outputs": [], "metadata": {"collapsed": false, "trusted": true}}, {"execution_count": 9, "cell_type": "code", "source": "byKey = histograms.reduceByKey(lambda x, y: x + y).collect()", "outputs": [], "metadata": {"collapsed": false, "trusted": true}}, {"execution_count": 10, "cell_type": "code", "source": "votes = map(lambda x: (x[0], x[1][1]), byKey)\nvotes = filter(lambda x: not x[0].endswith(\"_parent\"), votes)\nvotes = map(lambda x: (x[0].split(\"/\")[1], x[1]), votes)", "outputs": [], "metadata": {"collapsed": false, "trusted": true}}, {"execution_count": 11, "cell_type": "code", "source": "aggregates = pd.Series(dict(votes))", "outputs": [], "metadata": {"collapsed": false, "trusted": true}}, {"execution_count": 12, "cell_type": "code", "source": "aggregates", "outputs": [{"execution_count": 12, "output_type": "execute_result", "data": {"text/plain": "1.3.0.0-prerelease 43\n1.4.0.0-prerelease 19\n2.0.0.0 5\n2.0.0.0-prerelease 381\n2.0.0.1 35\n2.1.0.0-prerelease 11\n2.2.0.0-prerelease 1405\n3.0.0.0-prerelease 431\n38.0.1 53\n38.0.5 34\n39.0 22\n40.0a2 1\n41.0a1 7\ndtype: int64"}, "metadata": {}}], "metadata": {"collapsed": false, "trusted": true}}, {"execution_count": 13, "cell_type": "code", "source": "frame = pd.DataFrame(aggregates)", "outputs": [], "metadata": {"collapsed": false, "trusted": true}}, {"execution_count": 14, "cell_type": "code", "source": "frame.plot(kind = \"bar\")\nplt.title(\"CONNECTED_RUNTIME_VERSION\")", "outputs": [{"execution_count": 14, "output_type": "execute_result", "data": {"text/plain": "<matplotlib.text.Text at 0x7fa240283c90>"}, "metadata": {}}, {"output_type": "display_data", "data": {"image/png": "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\nRU5ErkJggg==\n", "text/plain": "<matplotlib.figure.Figure at 0x7fa24030f9d0>"}, "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