Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- {
- "cells": [
- {
- "cell_type": "code",
- "execution_count": 1,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Populating the interactive namespace from numpy and matplotlib\n"
- ]
- }
- ],
- "source": [
- "import matplotlib.pyplot as plt\n",
- "import pandas as pd\n",
- "import numpy as np\n",
- "import plotly.plotly as py\n",
- "\n",
- "%pylab inline"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 11,
- "metadata": {
- "collapsed": true
- },
- "outputs": [],
- "source": [
- "from pyspark.sql import *\n",
- "from pyspark.sql.functions import *\n",
- "import itertools\n",
- "import datetime"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 3,
- "metadata": {
- "collapsed": true
- },
- "outputs": [],
- "source": [
- "frame = sqlContext.read.load(\"s3://telemetry-parquet/longitudinal/v20160212\")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 8,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "subselect = frame.selectExpr(\"info.subsessionStartDate\", \"activeAddons\")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 21,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "MapType(StringType,StructType(List(StructField(blocklisted,BooleanType,true),StructField(description,StringType,true),StructField(name,StringType,true),StructField(userDisabled,BooleanType,true),StructField(appDisabled,BooleanType,true),StructField(version,StringType,true),StructField(scope,IntegerType,true),StructField(type,StringType,true),StructField(foreignInstall,BooleanType,true),StructField(hasBinaryComponents,BooleanType,true),StructField(installDay,LongType,true),StructField(updateDay,LongType,true),StructField(signedState,IntegerType,true))),false)"
- ]
- },
- "execution_count": 21,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "activeAddonsType = [f.dataType for f in subselect.schema.fields if f.name == 'activeAddons'][0].elementType\n",
- "activeAddonsType"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 45,
- "metadata": {
- "collapsed": true
- },
- "outputs": [],
- "source": [
- "def find_first_recent_activeAddons(subsessionStartDate, activeAddons):\n",
- " if activeAddons is None:\n",
- " return None\n",
- " for subsessionStartDate, activeAddons in itertools.izip(subsessionStartDate, activeAddons):\n",
- " try:\n",
- " if datetime.datetime.strptime(subsessionStartDate[:10], \"%Y-%m-%d\").date() >= datetime.date(2016, 1, 18) and activeAddons is not None:\n",
- " return activeAddons\n",
- " except ValueError:\n",
- " continue\n",
- " return None\n",
- "find_first_recent_activeAddons_udf = udf(find_first_recent_activeAddons, activeAddonsType)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 48,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "lastActiveAddons = subselect.select(find_first_recent_activeAddons_udf(subselect.subsessionStartDate, subselect.activeAddons).alias(\"lastActiveAddons\")).where(\"lastActiveAddons IS NOT NULL\")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 84,
- "metadata": {
- "collapsed": true
- },
- "outputs": [],
- "source": [
- "from collections import Counter\n",
- "\n",
- "class KeyedAccumulator(pyspark.AccumulatorParam):\n",
- " def addInPlace(self, v1, v2):\n",
- " assert isinstance(v1, Counter)\n",
- " if isinstance(v2, Counter):\n",
- " v1 += v2\n",
- " return v1\n",
- " k, v = v2\n",
- " v1[k] += v\n",
- " return v1\n",
- " \n",
- " def zero(self, v):\n",
- " assert isinstance(v, Counter), \"Expected Counter, got %r\" % (v,)\n",
- " return Counter()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "common_addons_by_id = sc.accumulator(Counter(), accum_param=KeyedAccumulator())\n",
- "common_unsigned_by_id = sc.accumulator(Counter(), accum_param=KeyedAccumulator())\n",
- "addon_map = sc.accumulator(Counter(), accum_param=KeyedAccumulator())\n",
- "total_nulladdons = sc.accumulator(0)\n",
- "total_inactive = sc.accumulator(0)\n",
- "total_active_nodata = sc.accumulator(0)\n",
- "total_active_data = sc.accumulator(0)\n",
- "total_active_no_addons = sc.accumulator(0)\n",
- "\n",
- "def map_activeAddons(activeAddons):\n",
- " total_active_data.add(1)\n",
- " if len(activeAddons) == 0:\n",
- " total_active_no_addons.add(1)\n",
- " return\n",
- " \n",
- " for addonId, addon in activeAddons.iteritems():\n",
- " addon_map.add(((addonId, addon.name, addon.version, addon.signedState), 1))\n",
- " common_addons_by_id.add((addonId, 1))\n",
- " if addon.signedState < 1:\n",
- " common_unsigned_by_id.add((addonId, 1))\n",
- "\n",
- "def my_accumulator(row):\n",
- " if row.activeAddons is None:\n",
- " total_nulladdons.add(1)\n",
- " return\n",
- " \n",
- " isActive = False\n",
- " for subsessionStartDate, activeAddons in itertools.izip(row.subsessionStartDate, row.activeAddons):\n",
- " try:\n",
- " if datetime.datetime.strptime(subsessionStartDate[:10], \"%Y-%m-%d\").date() < datetime.date(2016, 1, 11):\n",
- " break\n",
- " isActive = True\n",
- " except ValueError:\n",
- " continue\n",
- " \n",
- " if activeAddons is not None:\n",
- " map_activeAddons(activeAddons)\n",
- " return\n",
- " \n",
- " if isActive:\n",
- " total_active_nodata.add(1)\n",
- " else:\n",
- " total_inactive.add(1) \n",
- "\n",
- "subselect.rdd.foreach(my_accumulator)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 139,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "import __builtin__\n",
- "addon_table = [(addonId, name, version, signedState, count) for ((addonId, name, version, signedState), count) in addon_map.value.items()]\n",
- "def name_for_id(addonId):\n",
- " names = Counter()\n",
- " for i, n, v, s, c in addon_table:\n",
- " if i != addonId:\n",
- " continue\n",
- " names[n] += c\n",
- " l = names.items()\n",
- " l.sort(key=lambda i: i[1], reverse=True)\n",
- " total = float(__builtin__.sum([i[1] for i in l]))\n",
- " name = l[0][0]\n",
- " if len(l) > 1 and l[1][1] / total > 0.2:\n",
- " name += \" and \" + l[1][0]\n",
- " if l[0][1] / total < 0.2:\n",
- " name += \"and {} others\".format(len(l) - 1)\n",
- " return name"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 140,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "Users with no addons: 48.8%\n",
- "\n",
- "Top 100 enabled addons:\n",
- "12.6%: {d10d0bf8-f5b5-c8b4-a8b2-2b9879e08c5d} (Adblock Plus)\n",
- "7.2%: {82AF8DCA-6DE9-405D-BD5E-43525BDAD38A} (Skype)\n",
- "6.9%: firefox-hotfix@mozilla.org (Firefox Hotfix: Fix the migration to clear passwords on shutdown and Firefox Application Reputation lookups)\n",
- "2.9%: wrc@avast.com (Avast Online Security)\n",
- "2.7%: {b9db16a4-6edc-47ec-a1f4-b86292ed211d} (Video DownloadHelper)\n",
- "2.3%: {4ED1F68A-5463-4931-9384-8FFF5ED91D92} (McAfee WebAdvisor)\n",
- "2.3%: cpmanager@mozillaonline.com (附加组件管理器)\n",
- "2.2%: cehomepage@mozillaonline.com (火狐主页)\n",
- "2.2%: tabtweak@mozillaonline.com (标签页优化)\n",
- "2.2%: easyscreenshot@mozillaonline.com (网页截图)\n",
- "2.1%: commonfix@mozillaonline.com (火狐修复工具)\n",
- "2.1%: coba@mozilla.com.cn (网银支付助手)\n",
- "2.0%: wx-assistant@mozillaonline.com (微信网页版助手)\n",
- "1.8%: vb@yandex.ru (Визуальные закладки)\n",
- "1.8%: yasearch@yandex.ru (Элементы Яндекса)\n",
- "1.3%: abs@avira.com (Avira Browserschutz and Avira Browser Safety)\n",
- "1.2%: firebug@software.joehewitt.com (Firebug)\n",
- "1.2%: mozilla_cc2@internetdownloadmanager.com (IDM integration)\n",
- "1.1%: sovetnik@metabar.ru (Советник Яндекс.Маркета)\n",
- "0.9%: light_plugin_D772DC8D6FAF43A29B25C4EBAA5AD1DE@kaspersky.com (Kaspersky Protection)\n",
- "0.9%: sp@avast.com (Avast SafePrice)\n",
- "0.8%: {a38384b3-2d1d-4f36-bc22-0f7ae402bcd7} (Визуальные закладки @Mail.Ru)\n",
- "0.8%: firefox@mega.co.nz (MEGA)\n",
- "0.7%: content_blocker_663BE84DBCC949E88C7600F63CA7F098@kaspersky.com (Dangerous Websites Blocker and Modul zum Sperren von gefährlichen Webseiten)\n",
- "0.7%: virtual_keyboard_07402848C2F6470194F131B0F3DE025E@kaspersky.com (Virtual Keyboard and Virtuelle Tastatur)\n",
- "0.7%: {DDC359D1-844A-42a7-9AA1-88A850A938A8} (DownThemAll!)\n",
- "0.7%: adblockpopups@jessehakanen.net (Adblock Plus Pop-up Addon)\n",
- "0.6%: homepage@mail.ru (Домашняя страница Mail.Ru)\n",
- "0.6%: search@mail.ru (Поиск@Mail.Ru)\n",
- "0.6%: {635abd67-4fe9-1b23-4f01-e679fa7484c1} (Yahoo! Toolbar)\n",
- "0.6%: firefox@ghostery.com (Ghostery)\n",
- "0.6%: {b9bfaf1c-a63f-47cd-8b9a-29526ced9060} (Download YouTube Videos as MP4)\n",
- "0.6%: avg@toolbar (AVG Web TuneUp)\n",
- "0.6%: helper-sig@savefrom.net (SaveFrom.net - helper and SaveFrom.net помощник)\n",
- "0.6%: {73a6fe31-595d-460b-a920-fcc0f8843232} (NoScript)\n",
- "0.6%: artur.dubovoy@gmail.com (Flash Video Downloader - YouTube HD Download [4K])\n",
- "0.6%: {e4a8a97b-f2ed-450b-b12d-ee082ba24781} (Greasemonkey)\n",
- "0.6%: adbhelper@mozilla.org (ADB Helper)\n",
- "0.6%: {a0d7ccb3-214d-498b-b4aa-0e8fda9a7bf7} (WOT)\n",
- "0.6%: {C1A2A613-35F1-4FCF-B27F-2840527B6556} (Norton Identity Safe)\n",
- "0.5%: online_banking_08806E753BE44495B44E90AA2513BDC5@kaspersky.com (Safe Money and Sicherer Zahlungsverkehr)\n",
- "0.5%: content_blocker@kaspersky.com (Dangerous Websites Blocker)\n",
- "0.5%: fxdevtools-adapters@mozilla.org (Valence)\n",
- "0.4%: feca4b87-3be4-43da-a1b1-137c24220968@jetpack (YouTube Video and Audio Downloader)\n",
- "0.4%: support@lastpass.com (LastPass)\n",
- "0.4%: {19503e42-ca3c-4c27-b1e2-9cdb2170ee34} (FlashGot)\n",
- "0.4%: YoutubeDownloader@PeterOlayev.com (1-Click YouTube Video Downloader)\n",
- "0.4%: translator@zoli.bod (Google Translator for Firefox)\n",
- "0.4%: _65Members_@download.fromdoctopdf.com (FromDocToPDF)\n",
- "0.4%: {dc572301-7619-498c-a57d-39143191b318} (Tab Mix Plus)\n",
- "0.4%: elemhidehelper@adblockplus.org (Element Hiding Helper для Adblock Plus)\n",
- "0.4%: LVD-SAE@iacsearchandmedia.com (iLivid)\n",
- "0.4%: testpilot@labs.mozilla.com (Test Pilot)\n",
- "0.4%: {bee6eb20-01e0-ebd1-da83-080329fb9a3a} (Flash and Video Download)\n",
- "0.4%: anti_banner@kaspersky.com (Anti-Banner)\n",
- "0.3%: virtual_keyboard@kaspersky.com (Virtual Keyboard and Virtuelle Tastatur)\n",
- "0.3%: online_banking@kaspersky.com (Safe Money and Sicherer Zahlungsverkehr)\n",
- "0.3%: jid1-YcMV6ngYmQRA2w@jetpack (Pin It button)\n",
- "0.3%: info@youtube-mp3.org (YouTube mp3)\n",
- "0.3%: url_advisor@kaspersky.com (Kaspersky URL Advisor and Modul zur Link-Untersuchung)\n",
- "0.3%: deskCutv2@gmail.com (FirefixTab)\n",
- "0.3%: client@anonymox.net (anonymoX)\n",
- "0.3%: jid1-F9UJ2thwoAm5gQ@jetpack (Lightbeam)\n",
- "0.3%: {a7c6cf7f-112c-4500-a7ea-39801a327e5f} (FireFTP)\n",
- "0.3%: {195A3098-0BD5-4e90-AE22-BA1C540AFD1E} (Garmin Communicator)\n",
- "0.3%: firefoxdav@icloud.com (iCloud Bookmarks)\n",
- "0.3%: {1018e4d6-728f-4b20-ad56-37578a4de76b} (Flagfox)\n",
- "0.3%: bingsearch.full@microsoft.com (Bing Search)\n",
- "0.3%: abb@amazon.com (Amazon Assistant for Firefox)\n",
- "0.3%: uBlock0@raymondhill.net (uBlock Origin)\n",
- "0.3%: web2pdfextension@web2pdf.adobedotcom (Adobe Acrobat - Create PDF and Adobe Acrobat DC - Create PDF)\n",
- "0.3%: yahooprotected@gmail.com (YahooToolsProtected)\n",
- "0.3%: mailcheck@web.de (WEB.DE MailCheck)\n",
- "0.3%: {fe272bd1-5f76-4ea4-8501-a05d35d823fc} (Adblock Edge)\n",
- "0.3%: quicklaunch@mozillaonline.com (火狐捷径)\n",
- "0.3%: ols@f-secure.com (Browsing Protection by F-Secure)\n",
- "0.3%: cliqz@cliqz.com (Cliqz)\n",
- "0.3%: {c45c406e-ab73-11d8-be73-000a95be3b12} (Web Developer)\n",
- "0.3%: _dzMembers_@www.pconverter.com (PConverter)\n",
- "0.2%: anttoolbar@ant.com (Ant Video Downloader)\n",
- "0.2%: _4zMembers_@www.videodownloadconverter.com (VideoDownloadConverter)\n",
- "0.2%: WebProtection@360safe.com (360 Internet Protection and Защита от веб-угроз 360)\n",
- "0.2%: {E0B8C461-F8FB-49b4-8373-FE32E9252800} (Evernote Web Clipper)\n",
- "0.2%: jid1-HAV2inXAnQPIeA@jetpack (YouTube™ Flash® Player)\n",
- "0.2%: _39Members_@www.mapsgalaxy.com (MapsGalaxy)\n",
- "0.2%: {d40f5e7b-d2cf-4856-b441-cc613eeffbe3} (BetterPrivacy)\n",
- "0.2%: virtual_keyboard_294FF26A1D5B455495946778FDE7CEDB@kaspersky.com (Virtual Keyboard and Virtuelle Tastatur)\n",
- "0.2%: content_blocker_6418E0D362104DADA084DC312DFA8ABC@kaspersky.com (Dangerous Websites Blocker and Modul zum Sperren von gefährlichen Webseiten)\n",
- "0.2%: {37964A3C-4EE8-47b1-8321-34DE2C39BA4D} (Спутник @Mail.Ru)\n",
- "0.2%: safesearch@avira.com (Avira SafeSearch)\n",
- "0.2%: default_newtabff@gmail.com (Default NewTab)\n",
- "0.2%: {5384767E-00D9-40E9-B72F-9CC39D655D6F} (EPUBReader)\n",
- "0.2%: {1BC9BA34-1EED-42ca-A505-6D2F1A935BBB} (IE Tab 2 (FF 3.6+))\n",
- "0.2%: {b9acf540-acba-11e1-8ccb-001fd0e08bd4} (Easy Youtube Video Downloader Express)\n",
- "0.2%: personas@christopher.beard (Personas Plus)\n",
- "0.2%: firefox@zenmate.com (ZenMate Security, Privacy & Unblock VPN)\n",
- "0.2%: s3google@translator (S3.Google Translator and S3.Google Переводчик)\n",
- "0.2%: {3d7eb24f-2740-49df-8937-200b1cc08f8a} (Flashblock)\n",
- "0.2%: {20a82645-c095-46ed-80e3-08825760534b} (Microsoft .NET Framework Assistant)\n",
- "0.2%: jid1-4P0kohSJxU1qGg@jetpack (Hola Better Internet)\n",
- "\n",
- "Top 100 unsigned addons:\n",
- "0.9%: light_plugin_D772DC8D6FAF43A29B25C4EBAA5AD1DE@kaspersky.com (Kaspersky Protection)\n",
- "0.7%: content_blocker_663BE84DBCC949E88C7600F63CA7F098@kaspersky.com (Dangerous Websites Blocker and Modul zum Sperren von gefährlichen Webseiten)\n",
- "0.7%: virtual_keyboard_07402848C2F6470194F131B0F3DE025E@kaspersky.com (Virtual Keyboard and Virtuelle Tastatur)\n",
- "0.5%: online_banking_08806E753BE44495B44E90AA2513BDC5@kaspersky.com (Safe Money and Sicherer Zahlungsverkehr)\n",
- "0.5%: content_blocker@kaspersky.com (Dangerous Websites Blocker)\n",
- "0.4%: anti_banner@kaspersky.com (Anti-Banner)\n",
- "0.3%: virtual_keyboard@kaspersky.com (Virtual Keyboard and Virtuelle Tastatur)\n",
- "0.3%: online_banking@kaspersky.com (Safe Money and Sicherer Zahlungsverkehr)\n",
- "0.3%: url_advisor@kaspersky.com (Kaspersky URL Advisor and Modul zur Link-Untersuchung)\n",
- "0.3%: deskCutv2@gmail.com (FirefixTab)\n",
- "0.3%: yahooprotected@gmail.com (YahooToolsProtected)\n",
- "0.2%: virtual_keyboard_294FF26A1D5B455495946778FDE7CEDB@kaspersky.com (Virtual Keyboard and Virtuelle Tastatur)\n",
- "0.2%: content_blocker_6418E0D362104DADA084DC312DFA8ABC@kaspersky.com (Dangerous Websites Blocker and Modul zum Sperren von gefährlichen Webseiten)\n",
- "0.2%: default_newtabff@gmail.com (Default NewTab)\n",
- "0.2%: online_banking_69A4E213815F42BD863D889007201D82@kaspersky.com (Safe Money and Sicherer Zahlungsverkehr)\n",
- "0.1%: {1B33E42F-EF14-4cd3-B6DC-174571C4349C} (Thunder Extension)\n",
- "0.1%: mg.mail.yahoo.com@services.mozilla.org (Yahoo Mail)\n",
- "0.1%: {635abd67-4fe9-1b23-4f01-e679fa7484c1} (Yahoo! Toolbar)\n",
- "0.1%: {20a82645-c095-46ed-80e3-08825760534b} (Microsoft .NET Framework Assistant)\n",
- "0.1%: wrc@avast.com (Avast Online Security)\n",
- "0.1%: vb@yandex.ru (Визуальные закладки)\n",
- "0.1%: {87F8774F-B485-47E2-A755-A40A8A5E886D} (GBBD Caixa Economica Federal)\n",
- "0.1%: {82AF8DCA-6DE9-405D-BD5E-43525BDAD38A} (Skype)\n",
- "0.1%: web2pdfextension@web2pdf.adobedotcom (Adobe Acrobat - Create PDF and Adobe Acrobat DC - Create PDF)\n",
- "0.1%: defsearchp@gmail.com (Default SearchProtected)\n",
- "0.1%: search@mail.ru (Поиск@Mail.Ru)\n",
- "0.1%: {C7AE725D-FA5C-4027-BB4C-787EF9F8248A} (RelevantKnowledge and PremierOpinion)\n",
- "0.1%: plus.google.com@services.mozilla.org (Google+)\n",
- "0.1%: bingsearch.full@microsoft.com (Bing Search)\n",
- "0.1%: jqs@sun.com (Java Quick Starter)\n",
- "0.1%: {d720d64d-c71a-4316-b59e-8a41b860178f} (Quick Searcher)\n",
- "0.1%: yasearch@yandex.ru (Элементы Яндекса)\n",
- "0.1%: arthurj8283@gmail.com (xRocket Toolbar)\n",
- "0.1%: zoteroOpenOfficeIntegration@zotero.org (Zotero LibreOffice Integration)\n",
- "0.1%: {87F8774F-B485-47E2-A755-A40A8A5E886C} (GBBD Banco do Brasil)\n",
- "0.0%: loop@mozilla.org (Firefox Hello Beta)\n",
- "0.0%: {d10d0bf8-f5b5-c8b4-a8b2-2b9879e08c5d} (Adblock Plus)\n",
- "0.0%: {538F0036-F358-4f84-A764-89FB437166B4} (KillFF)\n",
- "0.0%: {a00bef25-f21a-4539-adbb-b179b29e2b92} (Video AdBlock for Firefox)\n",
- "0.0%: cehomepage@mozillaonline.com (火狐主页)\n",
- "0.0%: readystate@openqa.org (DocumentReadyState)\n",
- "0.0%: {503A0CD4-EDC8-489b-853B-19E0BAA8F0A4} (Selenium RC Runner)\n",
- "0.0%: veggy@veggyAddon.com (Mozilla Firefox Hotfixer)\n",
- "0.0%: {B64D9B05-48E1-4CEB-BF58-E0643994E900} (DVDVideoSoft YouTube MP3 and Video Download)\n",
- "0.0%: zoteroWinWordIntegration@zotero.org (Zotero Word for Windows Integration)\n",
- "0.0%: abs@avira.com (Avira Browserschutz and Avira Browser Safety)\n",
- "0.0%: {746505DC-0E21-4667-97F8-72EA6BCF5EEF} (Shopper-Pro and ShopperPro)\n",
- "0.0%: {6E727987-C8EA-44DA-8749-310C0FBE3C3E} (Поиск по торрентам and TSearch)\n",
- "0.0%: mail.google.com@services.mozilla.org (Gmail)\n",
- "0.0%: jid1-G80Ec8LLEbK5fQ@jetpack (New Tab by Yahoo)\n",
- "0.0%: {37964A3C-4EE8-47b1-8321-34DE2C39BA4D} (Спутник @Mail.Ru)\n",
- "0.0%: 2020Player_IKEA@2020Technologies.com (20-20 3D Viewer - IKEA)\n",
- "0.0%: sweetsearch@gmail.com (Search Enginer)\n",
- "0.0%: {B100D0FF-0001-8CE4-2790-AACE49B8AE35} (HTML5 location provider)\n",
- "0.0%: {D19CA586-DD6C-4a0a-96F8-14644F340D60} (McAfee ScriptScan for Firefox and IDS_SS_NAME)\n",
- "0.0%: {3B4DE07A-DE43-4DBC-873F-05835FF67DCE} (The Safe Surfing)\n",
- "0.0%: {e4f94d1e-2f53-401e-8885-681602c0ddd8} (McAfee Security Scan Plus)\n",
- "0.0%: AVJYFVOD75109374@HCDE39471360.com (CinemaPlus-3.3c)\n",
- "0.0%: {4ED1F68A-5463-4931-9384-8FFF5ED91D92} (McAfee WebAdvisor)\n",
- "0.0%: jid1-4P0kohSJxU1qGg@jetpack (Hola Better Internet)\n",
- "0.0%: {87F8774F-B485-47E2-A755-A40A8A5E8873} (Guardião - Itaú 30 horas)\n",
- "0.0%: cpmanager@mozillaonline.com (附加组件管理器)\n",
- "0.0%: {87F8774F-B485-47E2-A755-A40A8A5E8874} (GBBD Banco Santander (Brasil) S.A.)\n",
- "0.0%: d4db60df25f14dae9dd18@185c395f9e794c9ab86be3eb.com (CinemaPlus-3.2c)\n",
- "0.0%: {23fcfd51-4958-4f00-80a3-ae97e717ed8b} (DivX Plus Web Player HTML5 <video>)\n",
- "0.0%: toolbar@ask.com (Ask Toolbar)\n",
- "0.0%: twitter.com@services.mozilla.org (Twitter)\n",
- "0.0%: firefox@mega.co.nz (MEGA)\n",
- "0.0%: {F003DA68-8256-4b37-A6C4-350FA04494DF} (Logitech SetPoint)\n",
- "0.0%: www.ok.ru@services.mozilla.org (Odnoklassniki)\n",
- "0.0%: {c0c9a2c7-2e5c-4447-bc53-97718bc91e1b} (Easy YouTube Video Downloader)\n",
- "0.0%: mozilla_cc2@internetdownloadmanager.com (IDM integration)\n",
- "0.0%: {71A44B6B-42B9-4111-BD15-E67572E92A4C} (Vision WebLock)\n",
- "0.0%: avg@toolbar (AVG Web TuneUp)\n",
- "0.0%: 9tffxtbr@free.internetspeedtracker.com (Internet Speed Tracker)\n",
- "0.0%: www.goal.com@services.mozilla.org (GOAL)\n",
- "0.0%: {195A3098-0BD5-4e90-AE22-BA1C540AFD1E} (Garmin Communicator)\n",
- "0.0%: zoteroMacWordIntegration@zotero.org (Zotero Word for Mac Integration)\n",
- "0.0%: leethax@leethax.net (leethax.net extension)\n",
- "0.0%: LVD-SAE@iacsearchandmedia.com (iLivid)\n",
- "0.0%: translator@zoli.bod (Google Translator for Firefox)\n",
- "0.0%: www.linkedin.com@services.mozilla.org (LinkedIn)\n",
- "0.0%: {4D6A6C8E-1EB2-46e1-8CAA-40DAFDE3ED93} (Address Bar Search)\n",
- "0.0%: dmpluginff@westbyte.com (Download Master Plugin)\n",
- "0.0%: www.facebook.com@services.mozilla.org (Facebook)\n",
- "0.0%: dmremote@westbyte.com (Download Master Remote Download)\n",
- "0.0%: testpilot@labs.mozilla.com (Test Pilot)\n",
- "0.0%: {b9db16a4-6edc-47ec-a1f4-b86292ed211d} (Video DownloadHelper)\n",
- "0.0%: {a6fd85ed-e919-4a43-a5af-8da18bda539f} (Selenium IDE)\n",
- "0.0%: dmbarff@westbyte.com (Download Master Toolbar)\n",
- "0.0%: e-webprint@epson.com (E-Web Print)\n",
- "0.0%: javaformatters@seleniumhq.org (Selenium IDE: Java Formatters)\n",
- "0.0%: csharpformatters@seleniumhq.org (Selenium IDE: C# Formatters)\n",
- "0.0%: rubyformatters@seleniumhq.org (Selenium IDE: Ruby Formatters)\n",
- "0.0%: pythonformatters@seleniumhq.org (Selenium IDE: Python Formatters)\n",
- "0.0%: faststartff@gmail.com (Fast Start)\n",
- "0.0%: {4d31e4c9-ce86-4b0f-8ffb-56345a8b5f6c} (Everysale.Net)\n",
- "0.0%: extension@b5m.com (帮5淘 - 帮5买旗下购物助手)\n",
- "0.0%: ffxtlbr@babylon.com (Babylon)\n",
- "0.0%: 9tffxtbr@download.internetspeedtracker.com (Internet Speed Tracker)\n"
- ]
- }
- ],
- "source": [
- "print \"Users with no addons: {:.1%}\".format(float(total_active_no_addons.value) / total_active_data.value)\n",
- "print\n",
- "print \"Top 100 enabled addons:\"\n",
- "top_addons = common_addons_by_id.value.items()\n",
- "top_addons.sort(key=lambda a: a[1], reverse=True)\n",
- "for addonId, count in top_addons[:100]:\n",
- " name = name_for_id(addonId)\n",
- " print u\"{:.1%}: {} ({})\".format(float(count) / total_active_data.value, addonId, name, name_ratio)\n",
- "\n",
- "print\n",
- "print \"Top 100 unsigned addons:\"\n",
- "unsigned_addons = common_unsigned_by_id.value.items()\n",
- "unsigned_addons.sort(key=lambda a: a[1], reverse=True)\n",
- "for addonId, count in unsigned_addons[:100]:\n",
- " name = name_for_id(addonId)\n",
- " print u\"{:.1%}: {} ({})\".format(float(count) / total_active_data.value, addonId, name, name_ratio)\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 122,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "6"
- ]
- },
- "execution_count": 122,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "import __builtin__\n",
- "__builtin__.sum([1, 2, 3])"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 69,
- "metadata": {
- "collapsed": true
- },
- "outputs": [],
- "source": [
- "import boto3\n",
- "from gzip import GzipFile\n",
- "from cStringIO import StringIO\n",
- "import csv\n",
- "\n",
- "class S3CompressedWriter(object):\n",
- " def __init__(self, bucket, path, mimetype='text/plain'):\n",
- " self.bucket = bucket\n",
- " self.path = path\n",
- " self.mimetype = mimetype\n",
- " self._buffer = None\n",
- "\n",
- " def __enter__(self):\n",
- " self._buffer = StringIO();\n",
- " self._writer = GzipFile(mode=\"wb\", fileobj=self._buffer)\n",
- " return self._writer\n",
- "\n",
- " def __exit__(self, exc_type, exc_value, traceback):\n",
- " if exc_value is None:\n",
- " self._writer.close()\n",
- " self._buffer.seek(0)\n",
- " s3 = boto3.resource('s3')\n",
- " s3.Object(self.bucket, self.path).put(Body=self._buffer, ContentEncoding='gzip', ContentType=self.mimetype)\n",
- " self._buffer = None\n",
- "\n",
- " def __del__(self):\n",
- " assert self._buffer is None\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 75,
- "metadata": {
- "collapsed": false
- },
- "outputs": [],
- "source": [
- "with S3CompressedWriter('telemetry-public-analysis-2', 'bsmedberg/20160212-top-addons.csv') as fd:\n",
- " csvw = csv.writer(fd)\n",
- " for row in top_addons_by_id:\n",
- " csvw.writerow(row)\n"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 74,
- "metadata": {
- "collapsed": false
- },
- "outputs": [
- {
- "data": {
- "text/plain": [
- "322865"
- ]
- },
- "execution_count": 74,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "top_addons_by_id[0][1]"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 2",
- "language": "python",
- "name": "python2"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 2
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython2",
- "version": "2.7.10"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 0
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement