Created
September 6, 2018 10:58
-
-
Save preinoso/78b7099473e31446a9534e39fee4a2c5 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"nbformat_minor": 1, | |
"cells": [ | |
{ | |
"source": "# CDR exploration of a telco company", | |
"cell_type": "markdown", | |
"metadata": {} | |
}, | |
{ | |
"execution_count": 36, | |
"cell_type": "code", | |
"metadata": { | |
"scrolled": true, | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": "#!pip freeze --user > requirements.txt\n#!while read p; do pip install --user \"${p}\" --ignore-installed ; done <./requirements.txt" | |
}, | |
{ | |
"source": "### About the data set", | |
"cell_type": "markdown", | |
"metadata": {} | |
}, | |
{ | |
"source": "This dataset provides information about the telecommunication activity over the city of Milano.\n\nThe dataset is the result of a computation over the Call Detail Records (CDRs) generated by a telco company cellular network over the city of Milano. CDRs log the user activity for billing purposes and network management. There are many types of CDRs, for the generation of this dataset we considered those related to the following activities:\n\n - Received SMS: a CDR is generated each time a user receives an SMS\n - Sent SMS: a CDR is generated each time a user sends an SMS\n - Incoming Calls: a CDR is generated each time a user receives a call\n - Outgoing Calls: CDR is generated each time a user issues a call\n - Internet: a CDR is generate each time\n - a user starts an internet connection\n - a user ends an internet connection\n - during the same connection one of the following limits is reached:\u200b\n - 15 minutes from the last generated CDR\n - 5 MB from the last generated CDR\n\nBy aggregating the aforementioned records it was created this dataset that provides SMSs, calls and Internet traffic activity. It measures the level of interaction of the users with the mobile phone network; for example the higher is the number of SMS sent by the users, the higher is the activity of the sent SMS. Measurements of call and SMS activity have the same scale (therefore are comparable); those referring to Internet traffic do not. ", | |
"cell_type": "markdown", | |
"metadata": {} | |
}, | |
{ | |
"source": "On the dataset, the activities are referenced by a position on a grid.", | |
"cell_type": "markdown", | |
"metadata": {} | |
}, | |
{ | |
"source": "", | |
"cell_type": "markdown", | |
"metadata": {} | |
}, | |
{ | |
"source": "WGS84 (EPSG:4326)\n - [x1,y1] = [ 9.011533669936474, 45.56821407553667 ]\n - [x2,y2] = [ 9.312688264185276, 45.56778671132765 ]\n - [x3,y3] = [ 9.311521155996243, 45.356261753717845 ] \n - [x4,y4] = [ 9.011490619692509, 45.356685994655464 ]\n - d: 235 m", | |
"cell_type": "markdown", | |
"metadata": {} | |
}, | |
{ | |
"source": "As previously shown squares are numbered with ids. The square id numbering starts from the bottom left corner of the grid and grows till its right top corner.\n\nIn the following picture the grid is overlaid to the city of Milan city.", | |
"cell_type": "markdown", | |
"metadata": {} | |
}, | |
{ | |
"source": "", | |
"cell_type": "markdown", | |
"metadata": {} | |
}, | |
{ | |
"source": "### Libraries importing", | |
"cell_type": "markdown", | |
"metadata": {} | |
}, | |
{ | |
"execution_count": 37, | |
"cell_type": "code", | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": "import pyspark.sql.functions as func\nfrom pyspark.sql.types import *\nfrom pyspark.sql import SparkSession\nimport numpy as np\nimport matplotlib.pyplot as plt\n%matplotlib inline" | |
}, | |
{ | |
"execution_count": 38, | |
"cell_type": "code", | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": "#!pip install <library>" | |
}, | |
{ | |
"source": "### Credentials for accessing files in Object Storage", | |
"cell_type": "markdown", | |
"metadata": {} | |
}, | |
{ | |
"execution_count": 39, | |
"cell_type": "code", | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": "# The code was removed by Watson Studio for sharing." | |
}, | |
{ | |
"source": "### Reading the main data set file with network activity info", | |
"cell_type": "markdown", | |
"metadata": {} | |
}, | |
{ | |
"execution_count": 40, | |
"cell_type": "code", | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": "telco_data_full = spark.read\\\n .format('org.apache.spark.sql.execution.datasources.csv.CSVFileFormat')\\\n .option('header', 'true')\\\n .load('swift://TelefonicaCHI.' + name + '/sms-call-internet-mi-2013-12-01.csv')\\\n .fillna('0')\\\n .cache()" | |
}, | |
{ | |
"source": "### Sampling DataFrame", | |
"cell_type": "markdown", | |
"metadata": {} | |
}, | |
{ | |
"execution_count": 41, | |
"cell_type": "code", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"name": "stdout", | |
"text": "+--------+-------------+-------+--------------------+-------------------+--------------------+-------------------+--------------------+\n|squareId| interval|country| SMSin| SMSout| CallIn| CallOut| InternetTraffic|\n+--------+-------------+-------+--------------------+-------------------+--------------------+-------------------+--------------------+\n| 1|1385852400000| 39| 0.11098916961424417|0.16621436886121638| 0.10920185950874473|0.16442705875571695| 13.648437920592805|\n| 1|1385852400000| 46| 0| 0| 0| 0|0.026137424264286602|\n| 1|1385853000000| 39| 0.16513682662061693| 0.1763994583739133|0.030875085088185057|0.02730046487718618| 13.330858194494864|\n| 1|1385853600000| 0|0.029087774982685617|0.02730046487718618| 0| 0| 0|\n| 1|1385853600000| 39| 0.18645109168870494|0.13658782275823106| 0.05460092975437236| 0| 11.329552259939573|\n+--------+-------------+-------+--------------------+-------------------+--------------------+-------------------+--------------------+\nonly showing top 5 rows\n\n" | |
} | |
], | |
"source": "telco_data_full.show(5)" | |
}, | |
{ | |
"execution_count": 42, | |
"cell_type": "code", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"execution_count": 42, | |
"metadata": {}, | |
"data": { | |
"text/plain": "4438331" | |
}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": "telco_data_full.count()" | |
}, | |
{ | |
"source": "### Manipulating DataFrame", | |
"cell_type": "markdown", | |
"metadata": {} | |
}, | |
{ | |
"execution_count": 43, | |
"cell_type": "code", | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": "telco_data_full_temp = telco_data_full.withColumn(\"SMSin\", telco_data_full[\"SMSin\"].cast(\"double\"))\\\n .withColumn(\"SMSout\", telco_data_full[\"SMSout\"].cast(\"double\"))\\\n .withColumn(\"CallIn\", telco_data_full[\"CallIn\"].cast(\"double\"))\\\n .withColumn(\"CallOut\", telco_data_full[\"CallOut\"].cast(\"double\"))\\\n .withColumn(\"InternetTraffic\", telco_data_full[\"InternetTraffic\"].cast(\"double\"))" | |
}, | |
{ | |
"source": "### Grouping by activity type", | |
"cell_type": "markdown", | |
"metadata": {} | |
}, | |
{ | |
"execution_count": 44, | |
"cell_type": "code", | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": "telco_data_full_count = telco_data_full_temp.groupBy().sum('CallIn','CallOut','SMSin','SMSout','InternetTraffic')\\\n .withColumnRenamed(\"SUM(CallIn)\", \"CallIn\")\\\n .withColumnRenamed(\"SUM(CallOut)\", \"CallOut\")\\\n .withColumnRenamed(\"SUM(SMSin)\", \"SMSin\")\\\n .withColumnRenamed(\"SUM(SMSout)\", \"SMSout\")\\\n .withColumnRenamed(\"SUM(InternetTraffic)\", \"InternetTraffic\")" | |
}, | |
{ | |
"execution_count": 45, | |
"cell_type": "code", | |
"metadata": { | |
"pixiedust": { | |
"displayParams": { | |
"histoChartType": "stacked", | |
"mpld3": "true", | |
"aggregation": "SUM", | |
"binsize": "12", | |
"rowCount": "500", | |
"handlerId": "barChart", | |
"valueFields": "sum(SMSout),sum(SMSin),sum(CallOut),sum(CallIn)", | |
"keyFields": "id", | |
"legend": "true" | |
} | |
} | |
}, | |
"outputs": [ | |
{ | |
"execution_count": 45, | |
"metadata": {}, | |
"data": { | |
"text/plain": "<matplotlib.axes._subplots.AxesSubplot at 0x7f973c050490>" | |
}, | |
"output_type": "execute_result" | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"image/png": "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\nyy+/4Iwzxux136BBg+udc999WfnUqZezcOHTzJqllWFEpHEcnfVhrb0NuC3JtaREY9ucVlfvv6eH\n+nyISLK0mSsTDz64H9buO2NTt83pggXPEgxmN9jm9OCD+7J+/ad73bd+/WexplBpaWlUVVXFflZR\nUZ6gZyAibVXKgnpHUSml+dsS8rXDwYcZRx11DOXl5SxZsjh2X2PanO6+ffbZ43jllSVs3LgBgJKS\nbTz00FzOP/+XAHTr1p3162veEJYte4uKigoA/P50ysoa/pBVRGR/Utbm9M6xv034mPE0pc3p7ttd\nuuRw882/4847b48F77nnTmD48BEAjB17FjfeeC2TJk1g2LDhdOzYCaj54NLrTWPSpAmcccYYzj33\nvIQ9dxFp3dTmVNqU1nB63hdfbCT/0wdSfh71V5vD9BhymS54SRC1ORURacEU1CIiLqegFhFxOQW1\niIjLKahFRFwuJafnqc2piIhzKQnq3NxNvHv1lXT3+xMy3payMrjnvrinCT3xxOO88cZreL1ppKV5\nue66m3jwwfvYsiWfF19cEtvuppuuZeXKD1i6dBnV1dXMmTObVas+wOPx0L59B373uzvo1q07119/\nFbfccjvp6YGEPA8Rkf1JSVADdPf76RVovj6269at5b333mHBgmfx+Xxs317Crl3leDweMjI6s3bt\nR/zoR4cTjUbZunVr7AKXN998na1bi3nyyecBKC4uil3Ecued9zZb/SLSdrWZOeqtW4vJzMzC56t5\nb+rcOZOcnBwARo48lTfeeA2At9/+ByeddPJe+3XpkhP7PicnRCBQcwQ9btxYtm8voaBgCxdcMI5Z\ns37PL35xLtdccwW7dmntXxFJjDYT1MOGHUdhYQETJvyM2bNnsWbNqtjPjjrqaD76aA1VVVW8+ebr\njBx5Wuxnp5wyinfeWcbkyedz//33snGjrTPqnguJNm/+mnPO+TlPPfVnAoEAb731D0REEqHNBHWn\nTp2YP/8Zrr/+V2RlZXHLLTN45ZUleDwe0tJ8HHbY4bz55uvs2rWLbt26xZowhUJdee65l7j44svx\nej1cddWlrFq1snbUPVfKd+/eg379+gNgzCAKCrT+r4gkRsrmqFPB4/FwxBFDOeKIofTr159XXtnz\nAeLIkacyY8Z1TJkyNbbtbj6fj2OPHc6xxw4nGOzCsmVvMXTo0XuN3b59+9htrzdNUx8ikjBOFrcd\n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\n", | |
"text/plain": "<matplotlib.figure.Figure at 0x7f973be78bd0>" | |
}, | |
"metadata": {} | |
} | |
], | |
"source": "telco_data_full_count.toPandas().plot.bar()" | |
}, | |
{ | |
"execution_count": 46, | |
"cell_type": "code", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"execution_count": 46, | |
"metadata": {}, | |
"data": { | |
"text/plain": "<matplotlib.axes._subplots.AxesSubplot at 0x7f973c065050>" | |
}, | |
"output_type": "execute_result" | |
}, | |
{ | |
"output_type": "display_data", | |
"data": { | |
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAZAAAAD/CAYAAADfaoD3AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xt4lPWZ//H3JBE1JoYEIigoKOANum0VK2r111qVIq6C\nPUBRqyDa1UW32Fot4K5erocKXaqiPw9tUcHaoqvbgl5W8Gxttx4qtLXKTUQRAyQGMgQC/ioJ+f0x\n38QxTiYzD3GGmM/ruubymfv5nh5r585z+n5jLS0tiIiIZKsg3wMQEZHuSQlEREQiUQIREZFIlEBE\nRCQSJRAREYlECURERCIpyrSgmRUAfwbec/dxZnYf8GWgAWgBprj7X0PZecBYYFuIrwjxycBVofwN\n7r4wxEcC9wF7AY+7+2UhXg48CAwC1gAT3b0hXR8iIpIb2ZyBTAf+nvS9Bbjc3Y9095FJyWMsMMTd\nhwEXAXeFeDlwNXA0cAxwjZmVhbbuBC5090OBQ81sTIjPAJ5ydwOeAWam60NERHInowRiZgOB04Bf\nZFB/PLAQwN1fAsrMrB8wBljm7g3uvhlYBpxqZv2BUnd/OdRfCJyZ1NaCsL0gfE/Xh4iI5EimZyA3\nA1eQOOtIdr2ZrTCzuWa2R4gNAN5LKlMdYu3j65Li1SnKA/Rz91oAd68B9uugj3VJdUREJAc6TSBm\n9s9AbbjHEEvaNcPdR5C4JNUH+FGIx9o1ESOReNrH6SSeTtZ1mpqaW0IZffTRRx99Mv90KJOb6McD\n48zsNGBvoNTMFrr7eQDuvsPM7gUuD+WrgQOT6g8E1of4ie3iz6YpD1BjZv3cvTZc6nq/kz46FI9v\nz+BQRfKjsrKUurqt+R6GyCdUVpZ2uK/TMxB3n+XuB7n7IcAk4Bl3Py/8oGNmMRL3LF4PVZYA54V9\nxwKbw2WopcBoMysLN9RHA0vDpaktZjYqtHUesDiprSlhe0q7eKo+REQkRzJ+jDeFB8ysL4nLSSuA\niwHc/XEzO83M3iLxiO35IR43s+uAV0mcFl0bbqYDTOPjj/E+EeKzgYfMbCqwFpiQrg+R7qi5uZlV\nq1ZRX9+Y76GkNXjwIRQWFuZ7GLIbifWU6dzr6rb2jAOVbmf16ir++P3vsX9xcb6H0qEN27fzpZvn\nMWTIsHwPRXKssrI01T1nYNfOQESki+xfXMxBJR1faxbZHWkqExERiUQJREREIlECERGRSHQPRER6\nnObmZtasebtL2+yJT6kpgYhIj7NmzdtM/8kSisv267xwBrY3vM+tV4zr9Cm1+vpN3HrrXNzfpKSk\nlIqKCr73vcsZOPDAlOVHj/4yTz75AjU1G7jyystYuPBBli//M7/+9S+ZM+fmLhn7rlACEZEeqbhs\nP0rKczuF3qxZV3DaaWdw7bU3ArB69VvU12/qMIHEYrEOtj/dcWZKCUREJAdee+1VioqKGDfu622x\nIUOG8sEHHzB9+jQaG7fS1NTEd797MSec8JWM2rznnp9RW1vD+vXreP/9WiZMmMS3vjXp0zqET1AC\nERHJgbfffguzEZ+I77nnnvz4x/9FcXExDQ2bueii8zNOIABr177LbbfdzbZtjZx99jf5+tcn5Oxe\njBKIiEge7dy5k7vvvp0VK5ZTUBBj48Y64vF6yssrMqr/pS+dQFFREWVlvSkv70M8Xk/fvpWf8qgT\nlEBERHLg4IOH8Nxzz3wi/uSTT7B582buvfcBCgoKmDBhHP/4x4cZt7vHHnu0bRcUxGhqau6S8WZC\nCUREeqTtDe93XqgL2zrqqKP52c/u4LHHfsvppycWXV29+i1qajZQXl5BQUEBr732KjU1G9rq7O5z\nFSqBiEiPM3jwIdx6xbgub7MzN974E269dS73338fe+65J/37H8DUqf/CLbf8hMmTz2L48BEMGnRw\nW/lYlo9bZVt+V2k2XpE8W726ineumrFbT6a4tnErB99wk2bj7YHSzcarqUxERCQSJRAREYkk43sg\nZlZAYjXBancfZ2aDgUVAOfAacK67N5lZL2AhcBSwEfi2u68NbcwEpgJNwHR3XxbipwK3kEho8919\ndohn3YeIiORGNmcg04E3kr7PBua6uwGbgQtC/AKg3t2HkUgKcwDM7DBgIjACGAvcYWaxkJhuB8YA\nhwNnmdnwKH2IiEjuZJRAzGwgcBrwi6TwScAjYXsBcGbYHh++AzwcygGMAxa5e5O7rwGqgFHhU+Xu\n77r7DhJnHOOz7OPkTI5DRES6TqaXsG4GrgDKAMysDxB3951hfzXQOivZAOA9AHdvNrMGM6sI8f9N\nanNdiMVayye1NSrLPjabWYW712d4PCLSg2k6967RaQIxs38Gat19hZmdGMKx8EnWkrSvvZY08VRn\nQa3lM+0jlrQvpfLyYoqKetb/uNI9xOMlvJPvQWSgoqKEysrd91HjbKxatYorl1zNPl10PNvqtvKL\nKT/l0EMPTVtu48aN3Hjjjbz++uuUlpbSt29fZs2axaBBg1KWP/LII1m+fDnr1q3j4osv5tFHHwXg\n1VdfZfbs2TQ2NhKLxZgyZQoTJ05M2/e6detYvnw5p59+erSDTCGTM5DjgXFmdhqwN1BK4r5DmZkV\nhDOEgcD6UL4aOBBYb2aFQJm7x82sNd6qtU4MOKh93N03mlnvDPvY193j6Q4iHt+ewaGK5F59fWO+\nh5CR+vpG6uq25nsYXaK+vpF9KkspPaB3l7bZ2b+fiy/+V0477QxmzrwWSLyJ/tZbayku7mjeqxh1\ndVupr99Gc/NO6uq2smnTRn7wg8u56aafMmzYoWzZ0sD3v38pe+21L8cdd3yHfb/++ioeeeS3HHNM\n5hM1Amn/aOj0Hoi7z3L3g9z9EGAS8Iy7fwd4FpgQik0GFoftJeE7Yf8zSfFJZtbLzA4GhgIvA68A\nQ81sUHi6alJSW89k2YeIyG6po+nchw0zpk+fxgUXnMvkyWfx4ovPp23nN795mNNOO4NhwxJnO/vu\nW8a0ad/jl7+8D4Abb7yW55//6Cdx9OgvA3D33f+Xv/51BVOnnsNDD/26S45pV6YymQEsMrPrgOXA\n/BCfD9xvZlXAJhIJAXd/w8weIvEk1w5gmru3AM1mdimwjI8e410ZpQ8Rkd1VV03n/s47qxk79oyP\nxYYPH9HhPZ3W6U0uvvhSFi36JbNnd91KhlklEHd/Hng+bL8DHJOizD9IPK6bqv6PgR+niD8BWIp4\n1n2IiHQn2U7n3tKSes6rXM+DBXoTXUQkJw4+eAjub34injyd+733/ory8oq007kffPAhrFz5xsdi\nK1e+2TaZY2FhITt37mzb19S0o4uO4JOUQESkR9pWt5Wt6zd3yWdbBg8XHHXU0ezYsYPHHvttWyyb\n6dxbt7/xjQn87nePUVW1CoCGhs3cdddtnHPOeQD0778/K1cmEtULLzxHU1MTAMXF+7B9e9c+TKTp\n3EWkxxk8+BDmjPvPLm+zM7synXvrdp8+ffmP/7iOOXOub0sIEyeezXHHnQDAuHFfZ8aMyzn//LMZ\nNeo49tprbyBxw76goJDzzz+bsWPPYOLEs3b5mDWdu0ieaTp32Z1pOncREelySiAiIhKJEoiIiESi\nBCIiIpEogYiISCR6jFdEehxN5941lEBEpMdZs+Zt/vj977F/cXGXtLdh+3a4eV6njzkvWDCfp55a\nSkFBIYWFBfzwhzO54455bNiwnkceeayt3MyZl/Pqq6/w5JMv0NLSwq23zuW1114hFovRq9eeXHfd\nTfTvvz9XXnkZ11xzPfvsU9Ilx5EtJRAR6ZH2Ly7O6bs3r7/+N/70pz9w772/oqioiC1bGvjwwx3E\nYjFKS/flb3/7C5/73BdobGxk06ZNbS8OPv30MjZt2sjChQ8CsHFjXdvLgXPm3JKz8aeieyAiIjmw\nadNGysp6U1SU+Lt9333L6Nu3LwAnn/w1nnpqKQDPP/8MX/nKVz9Wr0+fvm3f+/atpKQkccYxYcI4\ntmxpoKZmA9/5zgRmz76Bc8+dyA9+8G98+GHH82l1FSUQEZEcGDXqWGprazj77G8yd+5sVqx4rW3f\nUUd9kb/8ZQU7d+7k6aeXcfLJY9r2nXTSaP7whxeYOvUcbr/9FqqqPKnVj14Sr65+j29969vcf/9D\nlJSU8Nxzn/4ySUogIiI5sPfee3PPPQ9w5ZVX0bt3b665Zha/+91jxGIxCguL+Pznv8DTTy/jww8/\npH///m2TJ1ZW7sevf/0/XHTRpRQUxLjssmm89tqrodWPZmjaf/8DGDJkKABmw6mpWd9+CF1O90BE\nRHIkFotxxBEjOeKIkQwZMpTf/e6jG+cnn/w1Zs36IRdccHFb2VZFRUUcc8xxHHPMcZSX9+GFF55j\n5MgvfqztXr16tW0XFBTm5BJWpwnEzPYEXgB6hfIPu/u1ZnYv8BWggUQanOLufw115gFjgW0hviLE\nJwNXhfI3uPvCEB8J3AfsBTzu7peFeDnwIDAIWANMdPeGdH2IiGRiQxdObb5h+3YO7qTM2rXvUlBQ\nwMCBBwJQVbWK/fc/gLffXg3AF75wJOeeez6nnPI14KPp21etWklFRV/69u3Lzp07Wb26qm0522T5\nmBi30wTi7v8ws6+6+3YzKwT+YGZPhN0/dPf/SS5vZmOBIe4+zMyOAe4Cjg3J4GpgJIkLd382s8Uh\nIdwJXOjuL5vZ42Y2xt2XkljS9il3n2NmPwJmAjM66qMr/oWIyGff4MGHwM3zuqy9g+l8OvcPPviA\nW26ZQ2NjI4WFRQwcOJArr7yKf//3H7WVmTTpO23brWcg8Xic2bNvaFsYasSIw/nGN1oXZP3kdO+5\nlNElLHdvTdV7hjqty12lGvF4YGGo95KZlZlZP+CrwLKkM4hlwKlm9jxQ6u4vh/oLgTOBpaGt1sWB\nFwDPkkgqKftw99rMDltEerLCwsKcT01vNpw777znE/F58+5KWX7ZsucB2i5dpfLf/70YSDzRtWDB\norb4WWd9J2X5rpbRTXQzKzCz5UAN8KS7vxJ2XW9mK8xsrpntEWIDgPeSqleHWPv4uqR4dYryAG1J\nwd1rgP066GNdUh0REcmBTM9AdgJHmtm+wG/M7DBghrvXhsTxc+BHwPV88qwkRuKeR6qzlXTxdLKu\nU15eTFFRz5pmQLqHeLyEd/I9iAxUVJRQWbn7LnoluZfVU1juviVccjrV3X8aYjvCDfXLQ7Fq4MCk\nagOB9SF+Yrv4s2nKA9S0Xpoys/7A+5300aF4vGvXAhbpKvX1jfkeQkbq6xupy2Dtb/lsSfdHQ6eX\nsMysr5mVhe29gVOAleEHHTOLkbhn8XqosgQ4L+w7FtgcLkMtBUaH+xXlwGhgabg0tcXMRoW2zgMW\nJ7U1JWxPaRdP1YeIiORIJvdA9geeNbMVwEskfvQfBx4ws78AfwH6kLh8Rdj3jpm9BdwNTAvxOHAd\n8Gpo51p33xz6mAbMB1YBVe7e+pTXbBJJx4GTgZvS9SEiIrkTy8ezw/lQV7e1ZxyodDurV1fxzlUz\ncjqxX7bWNm7l4BtuyvmTS58WTeeeucrK0g6fD9ab6CLS46xZ8zZ3/ORRepf165L2NjfUMu2KM3I+\nnXu2fv/75zjooMEMGjQ467qpKIGISI/Uu6wffctz9/T/pzGde7Z+//vn+dKXmrssgWgyRRGRHPg0\npnN/8sknmDx5EpMnT+LOO29rKzN69Jfbtp977mluvPFaXn/9r7z44gvcccc8pk49h/Xr1+3yMSmB\niIjkQFdP575x40buuut2brvtbu6991esXPkGL76YeHs91bQm//RPn+eEE77MJZdM5557HuCAA3b9\n7EsJREQkB7p6OveVK//OyJFfZN99yygoKGD06FNZsWI5kLuJFXUPREQkR7pyOvcvfvHoDhNFct1P\nc1p3JRAR6ZE2N3Tdu8eZtNWV07kPHTqMESMO59Zb57JlSwP77FPCU08tZcKEswCoqOjD2rVrGDjw\nIF544VmKi/cBoLi4mG3btnXZcSuBiEiPM3jwIUy74owubzOdrpzO/Zvf/DZ77LEHF110Cf/2bxcB\ncNxxJ3D88f8HgIsvvoQrrriM8vIKhg8fwfaw9snJJ3+N2bNv4OGHH+T662fv8n0QvUgokmd6kVB2\nZ+leJNRNdBERiUQJREREIlECERGRSJRAREQkEiUQERGJRAlEREQiUQIREZFIOn2R0Mz2BF4AeoXy\nD7v7tWY2GFgElAOvAee6e5OZ9QIWAkcBG4Fvu/va0NZMYCrQBEx392UhfipwC4mENt/dZ4d41n2I\niEhudHoG4u7/AL7q7kcCRwBjzewYEsvNznV3AzYDF4QqFwD17j6MRFKYA2BmhwETgRHAWOAOM4uZ\nWQFwOzAGOBw4y8yGh7ay6kNERHIno0tY7r49bO5J4iykBfgq8EiILwDODNvjw3eAh4GTwvY4YJG7\nN7n7GqAKGBU+Ve7+rrvvIHHGMT7UOSnDPk7O5DhERKTrZJRAzKzAzJYDNcCTwGpgs7vvDEWqgdZJ\nVQYA7wG4ezPQYGYVyfFgXYi1j1cDA8ysDxDPsI/NoQ8REcmRjCZTDD/iR5rZvsBvSFyGaq91rqlU\n86a0pImnSmKt5dvX6aiPWNK+lMrLiykq+uwteC/dXzxewjv5HkQGKipKqKzcfefrktzLajZed99i\nZs8DxwK9zawgJJeBwPpQrBo4EFhvZoVAmbvHzaw13qq1Tgw4qH3c3TeaWaZ97Ovu8XRjj8e3p9st\nn0HNzc2sWfN2vofRqbVr3833EDJSX99IXd3WfA9DcizdHw2ZPIXVF9jh7g1mtjdwCnAT8CwwAXgQ\nmAwsDlWWhO8vhf3PJMUfMLObSVyCGgq8TOIMZKiZDQI2AJPCh1A3mz5E2qxZ8zZXLrmafXbzv5rr\nVm7gcnrlexgiWcvkDGR/YEF4WqoAeNDdHzezN4FFZnYdsByYH8rPB+43sypgEyEZuPsbZvYQ8Aaw\nA5jm7i1As5ldCizjo8d4V4a2ZmTTh0h7+1SWUnpA73wPI61t728h8X8Jke5F64HIZ9bq1VVc+78/\n2e0TSM2Ktfzryzu0HojslrQeiIiIdDklEBERiUQJREREIlECERGRSJRAREQkEiUQERGJRAlEREQi\nUQIREZFIlEBERCQSJRAREYkkq9l4RaRn2tnS0m1mDR48+BAKC7V0Qy4ogYhIp2o/2M6KB/9K77La\nfA8lrc0NtUy74gzN2ZUjSiAikpHeZf3oWz6g84LSY+geiIiIRKIEIiIikWSyIuFAYCHQH2gGfubu\nt5nZNcB3gfdD0Vnu/kSoMxOYCjQB0919WYifCtzCRwtHzQ7xwcAioBx4DTjX3ZvMrFfo+yhgI/Bt\nd1+brg8REcmNTM5AmoAfuPthwHHApWY2POz7qbuPDJ/W5DECmAiMAMYCd5hZLKxoeDswBjgcOCup\nndnAXHc3YDNwQYhfANS7+zASiWdO6OOwVH1E/rcgIiJZ6zSBuHuNu68I243AmyTWNAdI9aM9Hljk\n7k3uvgaoAkaFT5W7v+vuO0iccYwPdU4CHgnbC4Azk9paELYfDuUAxnXQh4iI5EhW90DCpaYjgJdC\n6BIzW2FmvzCzshAbALyXVG1diLWPVwMDzKwPEHf3ncnx9m25ezPQYGYVafoQEZEcyTiBmFkJibOA\n6eFM5A5giLsfAdQAc0PRVGclLZ3E2+9rXb8827ZERCRHMnoPxMyKSCSP+919MYC71yUV+TnwaNiu\nBg5M2jcQWE/iR/+g9nF332hmvc2sIJyFtJZPbmu9mRUCZe4eN7OO+uhQeXkxRUV6O7UnicdL8j0E\nyYOKihIqK0vzPYweIdMXCe8B3nD3W1sDZtbf3WvC128Ar4ftJcADZnYzictKQ4GXSZztDDWzQcAG\nYFL4ADwDTAAeBCYDi5PamkziktmEUC5dHx2Kx7dneKjyWVFf35jvIUge1Nc3Ule3Nd/D+MxIl4wz\neYz3eOAc4G9mtpzEpaJZwNlmdgSwE1gDXATg7m+Y2UPAG8AOYJq7twDNZnYpsIyPHuNdGbqZASwy\ns+uA5cD8EJ8P3G9mVcAmQsJJ04fkQHNzM2vWvJ3vYXSqu8zdJNJdxVpaesbvbl3d1p5xoDmwenUV\n03+yhOKy/fI9lLQ2Vb/JgLEbKT2gd76HklbNirX868s7OKhk973s8tL7NawZce5uP5XJxvg6zv6X\nUZoLqwtVVpZ2+IqE5sKSSIrL9qNkN/8x2d5QS+L9UxH5NGgqExERiUQJREREIlECERGRSJRAREQk\nEiUQERGJRAlEREQiUQIREZFIlEBERCQSJRAREYlECURERCJRAhERkUiUQEREJBIlEBERiUQJRERE\nIlECERGRSDJZkXAgsBDoDzQDP3f3eWZWTmIJ2kEkViSc6O4Noc48YCywDZji7itCfDJwFYlVDW9w\n94UhPhK4D9gLeNzdLwvxrPsQEZHcyOQMpAn4gbsfBhwHXGJmw0ksQ/uUuxuJtcpnApjZWGCIuw8j\nscztXSFeDlwNHA0cA1xjZmWhjzuBC939UOBQMxsT4ln1ISIiudNpAnH3mta/7t29EXgTGAiMBxaE\nYgvCd8I/F4byLwFlZtYPGAMsc/cGd99MYm30U82sP1Dq7i+H+guBM5PayqYPERHJkazugZjZYOAI\n4E9AP3evhUSSAVoXyB4AvJdUrTrE2sfXJcWrU5Qniz7WJdUREZEcyHhNdDMrAR4Gprt7o5m1dFC0\n/QLsMRL3PFItzJ4unk7WdcrLiykqKuykWclEPF6S7yGIdKiiooTKytJ8D6NHyCiBmFkRieRxv7sv\nDuFaM+vn7rXhMtT7IV4NHJhUfSCwPsRPbBd/Nk15gJos++hQPL690+OUzNTXN+Z7CCIdqq9vpK5u\na76H8ZmRLhlnegnrHuANd781KbYEmBK2pwCLk+LnAZjZscDmcBlqKTDazMrCDfXRwNJwaWqLmY0y\ns1iouzhiHyIikiOZPMZ7PHAO8DczW07iUtEsYDbwkJlNBdYCEwDc/XEzO83M3iLxiO35IR43s+uA\nV0Mb14ab6QDT+PhjvE+EeFZ9iIhI7nSaQNz9D0BHNw9O6aDOpR3E7yORKNrH/wx8LkW8Pts+REQk\nN/QmuoiIRKIEIiIikSiBiIhIJEogIiISiRKIiIhEogQiIiKRKIGIiEgkSiAiIhKJEoiIiESiBCIi\nIpEogYiISCRKICIiEokSiIiIRKIEIiIikSiBiIhIJEogIiISSSYrEs4HTgdq3f3zIXYN8F0+WqN8\nVusqgmY2E5gKNAHT3X1ZiJ8K3EIiac1399khPhhYBJQDrwHnunuTmfUCFgJHARuBb7v72nR9iIhI\n7mRyBnIvMCZF/KfuPjJ8WpPHCGAiMAIYC9xhZjEzKwBuD+0cDpxlZsNDO7OBue5uwGbgghC/AKh3\n92EkEs+c0MdhqfrI8rhFRGQXdZpA3P1FIJ5iV6of7fHAIndvcvc1QBUwKnyq3P1dd99B4oxjfKhz\nEvBI2F4AnJnU1oKw/XAoBzCugz5ERCSHduUeyCVmtsLMfmFmZSE2AHgvqcy6EGsfrwYGmFkfIO7u\nO5Pj7dty92agwcwq0vQhIiI51Ok9kA7cAfynu7eY2fXAXOBCUp+VtJA6UbWE8u3rtIR/dtRWR/G0\nysuLKSoq7KyYZCAeL8n3EEQ6VFFRQmVlab6H0SNESiDuXpf09efAo2G7Gjgwad9AYD2JH/2D2sfd\nfaOZ9TazgnAW0lo+ua31ZlYIlLl73Mw66iOteHx7xscn6dXXN+Z7CCIdqq9vpK5ua76H8ZmRLhln\negnrY2cKZtY/ad83gNfD9hJgkpn1MrODgaHAy8ArwFAzGxSerpoELA51ngEmhO3JSfEl4Tth/zOd\n9CEiIjmUyWO8vwJOBPqY2VrgGuCrZnYEsBNYA1wE4O5vmNlDwBvADmCau7cAzWZ2KbCMjx7jXRm6\nmAEsMrPrgOXA/BCfD9xvZlXAJhJJJ10fIiKSQ50mEHc/O0X43jTlfwz8OEX8CcBSxN8BjkkR/weJ\nx3Uz7kNERHJHb6KLiEgkSiAiIhKJEoiIiESiBCIiIpEogYiISCRKICIiEokSiIiIRKIEIiIikSiB\niIhIJEogIiISiRKIiIhEogQiIiKRKIGIiEgkSiAiIhKJEoiIiESiBCIiIpFksiLhfOB0oNbdPx9i\n5cCDwCASKxJOdPeGsG8eMBbYBkxx9xUhPhm4CmgBbnD3hSE+ErgP2At43N0vi9qHiIjkTiZnIPcC\nY9rFZgBPubuRWKt8JoCZjQWGuPswEsvc3hXi5cDVwNEkVh+8xszKQlt3Ahe6+6HAoWY2JkofIiKS\nW50mEHd/EYi3C48HFoTtBeF7a3xhqPcSUGZm/UgkoGXu3uDum0msjX6qmfUHSt395VB/IXBmxD5E\nRCSHot4D2c/dawHcvQbYL8QHAO8llasOsfbxdUnx6hTlAfpl2Me6pDoiIpIjnd4DyVIsxfeWFHE6\niWfTRyZ1KC8vpqiosLNikoF4vCTfQxDpUEVFCZWVpfkeRo8QNYHUmlk/d68Nl6HeD/Fq4MCkcgOB\n9SF+Yrv4s2nKA9Rk2Uda8fj2TI5LMlBf35jvIYh0qL6+kbq6rfkexmdGumSc6SWsGB//y38JMCVs\nTwEWJ8XPAzCzY4HN4TLUUmC0mZWFG+qjgaXh0tQWMxtlZrFQd3HEPkREJIc6TSBm9ivgjySekFpr\nZucDN5FICA6cHL7j7o8D75jZW8DdwLQQjwPXAa8CLwHXhpvphDLzgVVAlbs/EeKzs+lDRERyq9NL\nWO5+dge7Tumg/KUdxO8j8b5H+/ifgc+liNdn24eIiOSO3kQXEZFIlEBERCQSJRAREYlECURERCJR\nAhERkUiUQEREJBIlEBERiUQJREREIlECERGRSJRAREQkEiUQERGJRAlEREQiUQIREZFIlEBERCQS\nJRAREYlECURERCKJuiY6AGa2BmgAdgI73H1UWLL2QWAQsAaY6O4Nofw8YCywDZji7itCfDJwFdAC\n3ODuC0N8JIlFqPYCHnf3y0K8wz5ERCQ3dvUMZCdworsf6e6jQmwG8JS7G/AMMBPAzMYCQ9x9GHAR\ncFeIlwPfck8XAAADzklEQVRXA0cDxwDXmFlZaOtO4EJ3P5TEkrpj0vUhIiK5s6sJJJaijfHAgrC9\nIHxvjS8EcPeXgDIz6weMAZa5e0NYJ30ZcKqZ9QdK3f3lUH8hcGYHfbTGRUQkR3Y1gbQAS83sFTO7\nMMT6uXstgLvXAPuF+ADgvaS61SHWPr4uKV6donyqPip38ThERCRLu3QPBPiSu9eYWSWwzMycRFJJ\nJZbie0uKOJ3EIykvL6aoqDBqdUkSj5fkewgiHaqoKKGysjTfw+gRdimBhL/+cfc6M/stMAqoNbN+\n7l4bLkO9H4pXAwcmVR8IrA/xE9vFn01THqCmgz46FI9vz/bwpAP19Y35HoJIh+rrG6mr25rvYXxm\npEvGkS9hmVmxmZWE7X2ArwF/A5YAU0KxKcDisL0EOC+UPxbYHC5DLQVGm1lZuKE+GlgaktMWMxtl\nZrFQN7mt1j4mJ8VFRCRHduUeSD/gRTNbDvwJeNTdlwGzSSQEB04GbgJw98eBd8zsLeBuYFqIx4Hr\ngFeBl4Brw810Qpn5wCqgyt2fCPHkPk5p7UNERHIn8iUsd38HOCJFvJ7Ej3qqOpd2EL+PxPse7eN/\nBj6XTR8iIpIbehNdREQiUQIREZFIlEBERCQSJRAREYlECURERCJRAhERkUiUQEREJBIlEBERiUQJ\nREREIlECERGRSJRAREQkEiUQERGJRAlEREQiUQIREZFIlEBERCSSXV0TPa/M7FTgFhKJcL67z87z\nkEREeoxuewZiZgXA7cAY4HDgLDMbnt9RiYj0HN02gQCjSCxz+6677wAWAePzPCYRkR6jOyeQAcB7\nSd+rQ0xERHKgO98DiaWIteR8FD3U9ob38z2ETn2wtZ5tdVvzPYxOba/fxobtTfkeRlp1H/w/NjfU\n5nsYneoOY/ws6c4JpBo4KOn7QGB9R4UrK0tTJRyJoLJyJC89MjLfw5AcOivfA5DdUndOIK8AQ81s\nELABmIT+OxcRyZluew/E3ZuBS4FlwN+BRe7+Zn5HJSLSc8RaWnTbQEREstdtz0BERCS/lEBERCQS\nJRAREYlECURERCJRAhERkUi683sgIt1SmPRzPImpd1pIvAC7RI+hS3ejMxCRHDKzH5GY+DMGvEzi\nhdgY8Gszm5HPsYlkS++BiOSQma0CDg8zSCfHewF/d/dh+RmZSPZ0BiKSWzuBA1LE9w/7RLoN3QMR\nya3LgKfNrIqPliM4CBhKYmoekW5Dl7BEciyspjmKxE30GImZpV8J87uJdBtKICIiEonugYiISCRK\nICIiEokSiIiIRKIEIiIikfx/TOiAqwDxP/IAAAAASUVORK5CYII=\n", | |
"text/plain": "<matplotlib.figure.Figure at 0x7f973be56110>" | |
}, | |
"metadata": {} | |
} | |
], | |
"source": "telco_data_full_count.select('CallIn','CallOut','SMSin','SMSout').toPandas().plot.bar()" | |
}, | |
{ | |
"source": "### Reading the file with the list of countries and its codes", | |
"cell_type": "markdown", | |
"metadata": {} | |
}, | |
{ | |
"execution_count": 47, | |
"cell_type": "code", | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": "country_codes = spark.read\\\n .format('org.apache.spark.sql.execution.datasources.csv.CSVFileFormat')\\\n .option('header', 'true')\\\n .load('swift://TelefonicaCHI.' + name + '/country-codes-small.csv')\\\n .cache()" | |
}, | |
{ | |
"execution_count": 48, | |
"cell_type": "code", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"name": "stdout", | |
"text": "+-------------+----+\n| name|Dial|\n+-------------+----+\n|United States| 1|\n| Russia| 7|\n| Egypt| 20|\n| South Africa| 27|\n| Greece| 30|\n+-------------+----+\nonly showing top 5 rows\n\n" | |
} | |
], | |
"source": "country_codes.show(5)" | |
}, | |
{ | |
"source": "### Counting how many activities happened from/to Italy to/from each country", | |
"cell_type": "markdown", | |
"metadata": {} | |
}, | |
{ | |
"execution_count": 49, | |
"cell_type": "code", | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": "dfCountActCountry = telco_data_full.groupBy(\"country\").count().orderBy(\"count\",ascending=False)" | |
}, | |
{ | |
"execution_count": 50, | |
"cell_type": "code", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"name": "stdout", | |
"text": "+-------+-------+\n|country| count|\n+-------+-------+\n| 39|1439320|\n| 0|1058160|\n| 49| 166877|\n| 46| 157819|\n| 33| 147041|\n+-------+-------+\nonly showing top 5 rows\n\n" | |
} | |
], | |
"source": "dfCountActCountry.show(5)" | |
}, | |
{ | |
"source": "### Joining the two files to translate country code to country name", | |
"cell_type": "markdown", | |
"metadata": {} | |
}, | |
{ | |
"execution_count": 51, | |
"cell_type": "code", | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": "dfCountryCodeTranslated = dfCountActCountry.join(country_codes, dfCountActCountry.country == country_codes.Dial).select(\"country\", \"name\", \"count\")" | |
}, | |
{ | |
"execution_count": 52, | |
"cell_type": "code", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"name": "stdout", | |
"text": "+-------+-------+-------+\n|country| name| count|\n+-------+-------+-------+\n| 39| Italy|1439320|\n| 49|Germany| 166877|\n| 46| Sweden| 157819|\n| 33| France| 147041|\n| 20| Egypt| 144565|\n+-------+-------+-------+\nonly showing top 5 rows\n\n" | |
} | |
], | |
"source": "dfCountryCodeTranslated.show(5)" | |
}, | |
{ | |
"source": "### Checking the countries with more interactions with Italy using Pixiedust", | |
"cell_type": "markdown", | |
"metadata": {} | |
}, | |
{ | |
"execution_count": 53, | |
"cell_type": "code", | |
"metadata": {}, | |
"outputs": [], | |
"source": "import pixiedust" | |
}, | |
{ | |
"execution_count": 54, | |
"cell_type": "code", | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": "#!pip install --user --upgrade pixiedust" | |
}, | |
{ | |
"execution_count": 55, | |
"cell_type": "code", | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": "dfCountryCodeTranslatedSmall = dfCountryCodeTranslated.orderBy(\"count\", ascending=False).where(\"name != 'Italy'\").limit(15)" | |
}, | |
{ | |
"execution_count": 56, | |
"cell_type": "code", | |
"metadata": { | |
"pixiedust": { | |
"displayParams": { | |
"googlemapapikey": "AIzaSyAKWN7HKgmG2rNeH2tryo3eEsQLqc2f6JA", | |
"orientation": "horizontal", | |
"mpld3": "true", | |
"aggregation": "SUM", | |
"logx": "false", | |
"logy": "false", | |
"rowCount": "500", | |
"handlerId": "barChart", | |
"valueFields": "count", | |
"legend": "false", | |
"kind": "simple-cluster", | |
"mapboxtoken": "sk.eyJ1IjoibWFyY29zaG0iLCJhIjoiY2ozZGRxejljMDAxMDJyczcwMWZ4MHU3cyJ9.qiN03bUF39z5RDSTPskBLw", | |
"chartsize": "90", | |
"mapDisplayMode": "region", | |
"rendererId": "bokeh", | |
"sortby": "Values ASC", | |
"keyFields": "name" | |
} | |
} | |
}, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"text/html": "<style type=\"text/css\">.pd_warning{display:none;}</style><div class=\"pd_warning\"><em>Hey, there's something awesome here! To see it, open this notebook outside GitHub, in a viewer like Jupyter</em></div>\n <div class=\"pd_save is-viewer-good\" style=\"padding-right:10px;text-align: center;line-height:initial !important;font-size: xx-large;font-weight: 500;color: coral;\">\n \n </div>\n \n <div id=\"chartFigure78a8b659\" class=\"pd_save\" style=\"overflow-x:auto\">\n \n <script class=\"pd_save\">\n if ( !window.Bokeh && !window.autoload){\n window.autoload=true;\n \n(function(root) {\n function now() {\n return new Date();\n }\n\n var force = true;\n\n if (typeof (root._bokeh_onload_callbacks) === \"undefined\" || force === true) {\n root._bokeh_onload_callbacks = [];\n root._bokeh_is_loading = undefined;\n }\n\n\n \n if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n var NB_LOAD_WARNING = {'data': {'text/html':\n \"<div style='background-color: #fdd'>\\n\"+\n \"<p>\\n\"+\n \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n \"</p>\\n\"+\n \"<ul>\\n\"+\n \"<li>re-rerun `output_notebook()` to attempt to load from CDN again, or</li>\\n\"+\n \"<li>use INLINE resources instead, as so:</li>\\n\"+\n \"</ul>\\n\"+\n \"<code>\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"</code>\\n\"+\n \"</div>\"}};\n\n function display_loaded() {\n if (root.Bokeh !== undefined) {\n var el = document.getElementById(\"\");\n if (el != null) {\n el.textContent = \"BokehJS \" + Bokeh.version + \" successfully loaded.\";\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(display_loaded, 100)\n }\n }\n\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) { callback() });\n }\n finally {\n delete root._bokeh_onload_callbacks\n }\n console.info(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(js_urls, callback) {\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.log(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.log(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = js_urls.length;\n for (var i = 0; i < js_urls.length; i++) {\n var url = js_urls[i];\n var s = document.createElement('script');\n s.src = url;\n s.async = false;\n s.onreadystatechange = s.onload = function() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.log(\"Bokeh: all BokehJS libraries loaded\");\n run_callbacks()\n }\n };\n s.onerror = function() {\n console.warn(\"failed to load library \" + url);\n };\n console.log(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.getElementsByTagName(\"head\")[0].appendChild(s);\n }\n };\n\n var js_urls = [\"https://cdn.pydata.org/bokeh/release/bokeh-0.12.7.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.12.7.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-tables-0.12.7.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-gl-0.12.7.min.js\"];\n\n var inline_js = [\n function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\n \n function(Bokeh) {\n \n },\n function(Bokeh) {\n console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-0.12.7.min.css\");\n Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-0.12.7.min.css\");\n console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.12.7.min.css\");\n Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.12.7.min.css\");\n console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-tables-0.12.7.min.css\");\n Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-tables-0.12.7.min.css\");\n }\n ];\n\n function run_inline_js() {\n \n if ((root.Bokeh !== undefined) || (force === true)) {\n for (var i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n } else if (force !== true) {\n var cell = $(document.getElementById(\"\")).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\n\n }\n\n if (root._bokeh_is_loading === 0) {\n console.log(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(js_urls, function() {\n console.log(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window)); \n }\n </script>\n \n\n <div class=\"bk-root\">\n <div class=\"bk-plotdiv\" id=\"0db4a7b9-fa60-437b-b334-a7ffe20f77da\"></div>\n </div>\n<script type=\"text/javascript\">\n \n (function(root) {\n function now() {\n return new Date();\n }\n \n var force = false;\n \n if (typeof (root._bokeh_onload_callbacks) === \"undefined\" || force === true) {\n root._bokeh_onload_callbacks = [];\n root._bokeh_is_loading = undefined;\n }\n \n \n \n if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n root._bokeh_timeout = Date.now() + 0;\n root._bokeh_failed_load = false;\n }\n \n var NB_LOAD_WARNING = {'data': {'text/html':\n \"<div style='background-color: #fdd'>\\n\"+\n \"<p>\\n\"+\n \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n \"</p>\\n\"+\n \"<ul>\\n\"+\n \"<li>re-rerun `output_notebook()` to attempt to load from CDN again, or</li>\\n\"+\n \"<li>use INLINE resources instead, as so:</li>\\n\"+\n \"</ul>\\n\"+\n \"<code>\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"</code>\\n\"+\n \"</div>\"}};\n \n function display_loaded() {\n if (root.Bokeh !== undefined) {\n var el = document.getElementById(\"0db4a7b9-fa60-437b-b334-a7ffe20f77da\");\n if (el != null) {\n el.textContent = \"BokehJS \" + Bokeh.version + \" successfully loaded.\";\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(display_loaded, 100)\n }\n }\n \n \n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) { callback() });\n }\n finally {\n delete root._bokeh_onload_callbacks\n }\n console.info(\"Bokeh: all callbacks have finished\");\n }\n \n function load_libs(js_urls, callback) {\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.log(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.log(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = js_urls.length;\n for (var i = 0; i < js_urls.length; i++) {\n var url = js_urls[i];\n var s = document.createElement('script');\n s.src = url;\n s.async = false;\n s.onreadystatechange = s.onload = function() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.log(\"Bokeh: all BokehJS libraries loaded\");\n run_callbacks()\n }\n };\n s.onerror = function() {\n console.warn(\"failed to load library \" + url);\n };\n console.log(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.getElementsByTagName(\"head\")[0].appendChild(s);\n }\n };var element = document.getElementById(\"0db4a7b9-fa60-437b-b334-a7ffe20f77da\");\n if (element == null) {\n console.log(\"Bokeh: ERROR: autoload.js configured with elementid '0db4a7b9-fa60-437b-b334-a7ffe20f77da' but no matching script tag was found. \")\n return false;\n }\n \n var js_urls = [];\n \n var inline_js = [\n function(Bokeh) {\n (function() {\n var fn = function() {\n var docs_json = {\"e1c4599f-db2d-456c-9b8e-8f86be11b0bc\":{\"roots\":{\"references\":[{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"f4bf8cb4-8be8-498b-9114-6c61476beba7\",\"type\":\"PanTool\"},{\"id\":\"65f7ae6c-ae80-48bb-a561-e58028f388c3\",\"type\":\"WheelZoomTool\"},{\"id\":\"f4b5c6c1-7b23-4f9f-a6e1-eea8e3fbb873\",\"type\":\"BoxZoomTool\"},{\"id\":\"73c32fe8-c3d6-4fd3-b486-3f8d1f7a6b5f\",\"type\":\"SaveTool\"},{\"id\":\"689228a9-0511-4ffc-9078-d788d9397ad9\",\"type\":\"ResetTool\"},{\"id\":\"33cce57f-1906-4d0a-922c-24899cdcd839\",\"type\":\"HelpTool\"}]},\"id\":\"6ac7855b-5b74-4943-acc4-9c620d71e014\",\"type\":\"Toolbar\"},{\"attributes\":{\"fill_alpha\":{\"field\":\"fill_alpha\"},\"fill_color\":{\"field\":\"color\"},\"height\":{\"field\":\"height\",\"units\":\"data\"},\"line_color\":{\"field\":\"line_color\"},\"width\":{\"field\":\"width\",\"units\":\"data\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"5d5ccca8-8864-43a3-bb3c-bd5c76cad220\",\"type\":\"Rect\"},{\"attributes\":{\"fill_alpha\":{\"field\":\"fill_alpha\"},\"fill_color\":{\"field\":\"color\"},\"height\":{\"field\":\"height\",\"units\":\"data\"},\"line_color\":{\"field\":\"line_color\"},\"width\":{\"field\":\"width\",\"units\":\"data\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"28bafc59-b001-48e6-bee4-ebbee7748d9e\",\"type\":\"Rect\"},{\"attributes\":{\"source\":null},\"id\":\"07402cfc-3902-4ed5-be4c-a0b35a98d9c0\",\"type\":\"CDSView\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"line_color\",\"line_alpha\",\"color\",\"fill_alpha\",\"height\",\"width\",\"y\",\"x\",\"label\"],\"data\":{\"chart_index\":[{\"name\":\"Germany\"}],\"color\":[\"#f22c40\"],\"fill_alpha\":[0.8],\"height\":[166877.0],\"label\":[{\"name\":\"Germany\"}],\"line_alpha\":[1.0],\"line_color\":[\"white\"],\"name\":[\"Germany\"],\"width\":[0.8],\"x\":[\"Germany\"],\"y\":[83438.5]}},\"id\":\"d9fcf1bc-3b21-4a69-9d5f-b60a18174893\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data_source\":{\"id\":\"f5a8df69-2e39-4b29-ad92-eaf5bc37cdcd\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"7fe5bfd0-0426-474c-a3c7-3226885587a4\",\"type\":\"Rect\"},\"hover_glyph\":null,\"muted_glyph\":null,\"view\":{\"id\":\"39ddb9e8-4eb6-4d01-99fe-9e66107e62a7\",\"type\":\"CDSView\"}},\"id\":\"4a80872b-ff7e-4995-bf29-49baf19d9d01\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"line_color\",\"line_alpha\",\"color\",\"fill_alpha\",\"height\",\"width\",\"y\",\"x\",\"label\"],\"data\":{\"chart_index\":[{\"name\":\"Romania\"}],\"color\":[\"#f22c40\"],\"fill_alpha\":[0.8],\"height\":[86748.0],\"label\":[{\"name\":\"Romania\"}],\"line_alpha\":[1.0],\"line_color\":[\"white\"],\"name\":[\"Romania\"],\"width\":[0.8],\"x\":[\"Romania\"],\"y\":[43374.0]}},\"id\":\"5665cd43-882c-4e6d-b4c5-4174695e985a\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"line_color\",\"line_alpha\",\"color\",\"fill_alpha\",\"height\",\"width\",\"y\",\"x\",\"label\"],\"data\":{\"chart_index\":[{\"name\":\"United Kingdom\"}],\"color\":[\"#f22c40\"],\"fill_alpha\":[0.8],\"height\":[106926.0],\"label\":[{\"name\":\"United Kingdom\"}],\"line_alpha\":[1.0],\"line_color\":[\"white\"],\"name\":[\"United Kingdom\"],\"width\":[0.8],\"x\":[\"United Kingdom\"],\"y\":[53463.0]}},\"id\":\"b468bc54-33a7-404e-b5ae-f9fd95c3c542\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"689228a9-0511-4ffc-9078-d788d9397ad9\",\"type\":\"ResetTool\"},{\"attributes\":{\"axis_label\":\"count\",\"formatter\":{\"id\":\"75f42276-4b46-4a61-8d70-a946d38b45ce\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"3d6407bc-042e-4a39-9677-11cc8c1c7e1d\",\"subtype\":\"Chart\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"1cb03b38-db34-4ca1-8376-85486a6eddd2\",\"type\":\"BasicTicker\"}},\"id\":\"a096b7af-2c7a-4822-849b-0c4802c564ac\",\"type\":\"LinearAxis\"},{\"attributes\":{\"fill_alpha\":{\"field\":\"fill_alpha\"},\"fill_color\":{\"field\":\"color\"},\"height\":{\"field\":\"height\",\"units\":\"data\"},\"line_color\":{\"field\":\"line_color\"},\"width\":{\"field\":\"width\",\"units\":\"data\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"fb12182c-c960-40e3-b5da-2d8939f32fed\",\"type\":\"Rect\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"line_color\",\"line_alpha\",\"color\",\"fill_alpha\",\"height\",\"width\",\"y\",\"x\",\"label\"],\"data\":{\"chart_index\":[{\"name\":\"United States\"}],\"color\":[\"#f22c40\"],\"fill_alpha\":[0.8],\"height\":[55844.0],\"label\":[{\"name\":\"United States\"}],\"line_alpha\":[1.0],\"line_color\":[\"white\"],\"name\":[\"United States\"],\"width\":[0.8],\"x\":[\"United States\"],\"y\":[27922.0]}},\"id\":\"bbb027bd-eeb7-4f63-801e-ad3d25d5ac9b\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_alpha\":{\"field\":\"fill_alpha\"},\"fill_color\":{\"field\":\"color\"},\"height\":{\"field\":\"height\",\"units\":\"data\"},\"line_color\":{\"field\":\"line_color\"},\"width\":{\"field\":\"width\",\"units\":\"data\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"7fe5bfd0-0426-474c-a3c7-3226885587a4\",\"type\":\"Rect\"},{\"attributes\":{},\"id\":\"1cb03b38-db34-4ca1-8376-85486a6eddd2\",\"type\":\"BasicTicker\"},{\"attributes\":{\"data_source\":{\"id\":\"02594fcd-4a5a-4554-bdca-db453c02f49a\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"249715bd-027c-476c-b5e1-dcf9d064d774\",\"type\":\"Rect\"},\"hover_glyph\":null,\"muted_glyph\":null,\"view\":{\"id\":\"ea2a9a04-a366-4baa-95a0-5ec4ae397470\",\"type\":\"CDSView\"}},\"id\":\"6d2666fe-a886-41cf-bb51-ef278eb6ea52\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"line_color\",\"line_alpha\",\"color\",\"fill_alpha\",\"height\",\"width\",\"y\",\"x\",\"label\"],\"data\":{\"chart_index\":[{\"name\":\"Poland\"}],\"color\":[\"#f22c40\"],\"fill_alpha\":[0.8],\"height\":[49568.0],\"label\":[{\"name\":\"Poland\"}],\"line_alpha\":[1.0],\"line_color\":[\"white\"],\"name\":[\"Poland\"],\"width\":[0.8],\"x\":[\"Poland\"],\"y\":[24784.0]}},\"id\":\"cc7cb995-f93b-4b5a-ba9c-d11a8cb13d9f\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"line_color\",\"line_alpha\",\"color\",\"fill_alpha\",\"height\",\"width\",\"y\",\"x\",\"label\"],\"data\":{\"chart_index\":[{\"name\":\"China\"}],\"color\":[\"#f22c40\"],\"fill_alpha\":[0.8],\"height\":[56892.0],\"label\":[{\"name\":\"China\"}],\"line_alpha\":[1.0],\"line_color\":[\"white\"],\"name\":[\"China\"],\"width\":[0.8],\"x\":[\"China\"],\"y\":[28446.0]}},\"id\":\"0e1edfed-2fde-4e43-84a6-ce9077bda823\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"75f42276-4b46-4a61-8d70-a946d38b45ce\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"line_color\",\"line_alpha\",\"color\",\"fill_alpha\",\"height\",\"width\",\"y\",\"x\",\"label\"],\"data\":{\"chart_index\":[{\"name\":\"France\"}],\"color\":[\"#f22c40\"],\"fill_alpha\":[0.8],\"height\":[147041.0],\"label\":[{\"name\":\"France\"}],\"line_alpha\":[1.0],\"line_color\":[\"white\"],\"name\":[\"France\"],\"width\":[0.8],\"x\":[\"France\"],\"y\":[73520.5]}},\"id\":\"02594fcd-4a5a-4554-bdca-db453c02f49a\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"3810eb1b-c793-46bd-beb4-1559aae3c0c2\",\"type\":\"CategoricalScale\"},{\"attributes\":{\"source\":null},\"id\":\"b89a2851-4434-4701-a5d1-658561aa8a92\",\"type\":\"CDSView\"},{\"attributes\":{\"data_source\":{\"id\":\"5665cd43-882c-4e6d-b4c5-4174695e985a\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"3c1c653c-ee01-4bb0-a344-62241edf966e\",\"type\":\"Rect\"},\"hover_glyph\":null,\"muted_glyph\":null,\"view\":{\"id\":\"68ccf7d8-cf1b-4c7f-8f16-7612999a1872\",\"type\":\"CDSView\"}},\"id\":\"b7dcee57-392b-49c6-8370-18af913b3c7d\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":null},\"id\":\"ea2a9a04-a366-4baa-95a0-5ec4ae397470\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":null},\"id\":\"d13da4f9-3890-4818-9605-fe2d2f397133\",\"type\":\"CDSView\"},{\"attributes\":{\"data_source\":{\"id\":\"b468bc54-33a7-404e-b5ae-f9fd95c3c542\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"854fc042-d69e-4776-b0a1-39719ed68ee1\",\"type\":\"Rect\"},\"hover_glyph\":null,\"muted_glyph\":null,\"view\":{\"id\":\"45fb2672-8d60-43f7-bbf7-248205047c08\",\"type\":\"CDSView\"}},\"id\":\"2fe13a6d-bd4f-4a83-b8a4-d4caf6b07106\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_alpha\":{\"field\":\"fill_alpha\"},\"fill_color\":{\"field\":\"color\"},\"height\":{\"field\":\"height\",\"units\":\"data\"},\"line_color\":{\"field\":\"line_color\"},\"width\":{\"field\":\"width\",\"units\":\"data\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3c1c653c-ee01-4bb0-a344-62241edf966e\",\"type\":\"Rect\"},{\"attributes\":{\"children\":[{\"id\":\"3d6407bc-042e-4a39-9677-11cc8c1c7e1d\",\"subtype\":\"Chart\",\"type\":\"Plot\"}]},\"id\":\"14a55597-c629-46d4-90b8-5f3296da9844\",\"type\":\"Row\"},{\"attributes\":{\"fill_alpha\":{\"field\":\"fill_alpha\"},\"fill_color\":{\"field\":\"color\"},\"height\":{\"field\":\"height\",\"units\":\"data\"},\"line_color\":{\"field\":\"line_color\"},\"width\":{\"field\":\"width\",\"units\":\"data\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"66b06ab7-b927-4a8d-b894-55f403a36f11\",\"type\":\"Rect\"},{\"attributes\":{\"source\":null},\"id\":\"68ccf7d8-cf1b-4c7f-8f16-7612999a1872\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"73c32fe8-c3d6-4fd3-b486-3f8d1f7a6b5f\",\"type\":\"SaveTool\"},{\"attributes\":{\"data_source\":{\"id\":\"cc7cb995-f93b-4b5a-ba9c-d11a8cb13d9f\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"3498fe28-4c4d-414b-9469-b7dd39863c29\",\"type\":\"Rect\"},\"hover_glyph\":null,\"muted_glyph\":null,\"view\":{\"id\":\"d13da4f9-3890-4818-9605-fe2d2f397133\",\"type\":\"CDSView\"}},\"id\":\"67ac067b-177c-4389-99df-8d1114f76909\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data_source\":{\"id\":\"095ea097-0046-47d6-8e19-b407bb57d01f\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"f0987e1d-f6ab-462e-a12a-bb272bf6fbfd\",\"type\":\"Rect\"},\"hover_glyph\":null,\"muted_glyph\":null,\"view\":{\"id\":\"0acc53fc-b9a6-45be-86b3-57e0f28ef767\",\"type\":\"CDSView\"}},\"id\":\"175e0b40-7d0e-4b4b-8975-6809ecdf4599\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_alpha\":{\"field\":\"fill_alpha\"},\"fill_color\":{\"field\":\"color\"},\"height\":{\"field\":\"height\",\"units\":\"data\"},\"line_color\":{\"field\":\"line_color\"},\"width\":{\"field\":\"width\",\"units\":\"data\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"c413f9d2-c8de-4278-b3a4-5e28e7cad797\",\"type\":\"Rect\"},{\"attributes\":{\"data_source\":{\"id\":\"0df986f5-461d-4676-876e-437072ab5ad1\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"28bafc59-b001-48e6-bee4-ebbee7748d9e\",\"type\":\"Rect\"},\"hover_glyph\":null,\"muted_glyph\":null,\"view\":{\"id\":\"be681197-0a38-4bb4-9e2f-dd0b631d7f11\",\"type\":\"CDSView\"}},\"id\":\"c8ded361-787f-4498-91a6-6653c75206f6\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"line_color\",\"line_alpha\",\"color\",\"fill_alpha\",\"height\",\"width\",\"y\",\"x\",\"label\"],\"data\":{\"chart_index\":[{\"name\":\"Sweden\"}],\"color\":[\"#f22c40\"],\"fill_alpha\":[0.8],\"height\":[157819.0],\"label\":[{\"name\":\"Sweden\"}],\"line_alpha\":[1.0],\"line_color\":[\"white\"],\"name\":[\"Sweden\"],\"width\":[0.8],\"x\":[\"Sweden\"],\"y\":[78909.5]}},\"id\":\"f3ac18a9-8929-4a6a-9fdf-5d572b797f0f\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_alpha\":{\"field\":\"fill_alpha\"},\"fill_color\":{\"field\":\"color\"},\"height\":{\"field\":\"height\",\"units\":\"data\"},\"line_color\":{\"field\":\"line_color\"},\"width\":{\"field\":\"width\",\"units\":\"data\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"84d08248-7c5a-48ad-827c-6691c5011bd8\",\"type\":\"Rect\"},{\"attributes\":{\"fill_alpha\":{\"field\":\"fill_alpha\"},\"fill_color\":{\"field\":\"color\"},\"height\":{\"field\":\"height\",\"units\":\"data\"},\"line_color\":{\"field\":\"line_color\"},\"width\":{\"field\":\"width\",\"units\":\"data\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"854fc042-d69e-4776-b0a1-39719ed68ee1\",\"type\":\"Rect\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"line_color\",\"line_alpha\",\"color\",\"fill_alpha\",\"height\",\"width\",\"y\",\"x\",\"label\"],\"data\":{\"chart_index\":[{\"name\":\"Philippines\"}],\"color\":[\"#f22c40\"],\"fill_alpha\":[0.8],\"height\":[42197.0],\"label\":[{\"name\":\"Philippines\"}],\"line_alpha\":[1.0],\"line_color\":[\"white\"],\"name\":[\"Philippines\"],\"width\":[0.8],\"x\":[\"Philippines\"],\"y\":[21098.5]}},\"id\":\"de0d524b-b3a8-442e-9221-537b23712e85\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"19149b76-324c-43be-8b1e-064078731db9\",\"type\":\"CategoricalTickFormatter\"},{\"attributes\":{\"data_source\":{\"id\":\"38e9781e-9202-4a4a-b241-d163521ead8a\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"9df3d405-5a56-4412-9423-efdd5970fba8\",\"type\":\"Rect\"},\"hover_glyph\":null,\"muted_glyph\":null,\"view\":{\"id\":\"096e93e9-a90f-4032-80f9-4c4de832f369\",\"type\":\"CDSView\"}},\"id\":\"6bb1a88e-9713-4ece-8aa1-fce0dbd4a236\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":null},\"id\":\"92f4709e-c469-4ab9-b941-49e16c617807\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_alpha\":{\"field\":\"fill_alpha\"},\"fill_color\":{\"field\":\"color\"},\"height\":{\"field\":\"height\",\"units\":\"data\"},\"line_color\":{\"field\":\"line_color\"},\"width\":{\"field\":\"width\",\"units\":\"data\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3498fe28-4c4d-414b-9469-b7dd39863c29\",\"type\":\"Rect\"},{\"attributes\":{\"data_source\":{\"id\":\"de0d524b-b3a8-442e-9221-537b23712e85\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"836bad5c-b958-4501-b05b-df630d935e04\",\"type\":\"Rect\"},\"hover_glyph\":null,\"muted_glyph\":null,\"view\":{\"id\":\"07402cfc-3902-4ed5-be4c-a0b35a98d9c0\",\"type\":\"CDSView\"}},\"id\":\"c893d421-6aa6-4870-9c2a-b9129c70da5a\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"callback\":null,\"end\":175220.85},\"id\":\"80c39502-af2a-4fe0-9ca8-3acf0497836c\",\"type\":\"Range1d\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"line_color\",\"line_alpha\",\"color\",\"fill_alpha\",\"height\",\"width\",\"y\",\"x\",\"label\"],\"data\":{\"chart_index\":[{\"name\":\"Switzerland\"}],\"color\":[\"#f22c40\"],\"fill_alpha\":[0.8],\"height\":[135764.0],\"label\":[{\"name\":\"Switzerland\"}],\"line_alpha\":[1.0],\"line_color\":[\"white\"],\"name\":[\"Switzerland\"],\"width\":[0.8],\"x\":[\"Switzerland\"],\"y\":[67882.0]}},\"id\":\"38e9781e-9202-4a4a-b241-d163521ead8a\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":null},\"id\":\"0b4f3a48-4f6b-412c-a558-a9b66748c281\",\"type\":\"CDSView\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"line_color\",\"line_alpha\",\"color\",\"fill_alpha\",\"height\",\"width\",\"y\",\"x\",\"label\"],\"data\":{\"chart_index\":[{\"name\":\"Bangladesh\"}],\"color\":[\"#f22c40\"],\"fill_alpha\":[0.8],\"height\":[50372.0],\"label\":[{\"name\":\"Bangladesh\"}],\"line_alpha\":[1.0],\"line_color\":[\"white\"],\"name\":[\"Bangladesh\"],\"width\":[0.8],\"x\":[\"Bangladesh\"],\"y\":[25186.0]}},\"id\":\"31cd1018-a75c-465f-a1a4-7785fc3695cb\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"children\":[{\"id\":\"9e051597-40c1-4912-8550-730ffdabc6a6\",\"type\":\"ToolbarBox\"},{\"id\":\"5ca7153b-5450-4cf7-8c18-056348685217\",\"type\":\"Column\"}]},\"id\":\"5dcd9953-901f-4641-aadf-ab1efc4cc94e\",\"type\":\"Column\"},{\"attributes\":{},\"id\":\"33cce57f-1906-4d0a-922c-24899cdcd839\",\"type\":\"HelpTool\"},{\"attributes\":{\"fill_alpha\":{\"field\":\"fill_alpha\"},\"fill_color\":{\"field\":\"color\"},\"height\":{\"field\":\"height\",\"units\":\"data\"},\"line_color\":{\"field\":\"line_color\"},\"width\":{\"field\":\"width\",\"units\":\"data\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"9df3d405-5a56-4412-9423-efdd5970fba8\",\"type\":\"Rect\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"lightgrey\"},\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":{\"value\":1.0},\"line_color\":{\"value\":\"black\"},\"line_dash\":[4,4],\"line_width\":{\"value\":2},\"plot\":null,\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"8e105077-8012-466c-8e07-38a8b907fba6\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"65f7ae6c-ae80-48bb-a561-e58028f388c3\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"children\":[{\"id\":\"14a55597-c629-46d4-90b8-5f3296da9844\",\"type\":\"Row\"}]},\"id\":\"5ca7153b-5450-4cf7-8c18-056348685217\",\"type\":\"Column\"},{\"attributes\":{\"data_source\":{\"id\":\"d9fcf1bc-3b21-4a69-9d5f-b60a18174893\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"5d5ccca8-8864-43a3-bb3c-bd5c76cad220\",\"type\":\"Rect\"},\"hover_glyph\":null,\"muted_glyph\":null,\"view\":{\"id\":\"b1dc7ac4-0ac9-454b-8847-bb79563acc24\",\"type\":\"CDSView\"}},\"id\":\"1c3cd1c3-4bf5-4c68-9efb-622cde7cbfe1\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"9e2e7bed-e9be-4203-93ba-4ea409b8bdae\",\"type\":\"LinearScale\"},{\"attributes\":{\"data_source\":{\"id\":\"bbb027bd-eeb7-4f63-801e-ad3d25d5ac9b\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"c413f9d2-c8de-4278-b3a4-5e28e7cad797\",\"type\":\"Rect\"},\"hover_glyph\":null,\"muted_glyph\":null,\"view\":{\"id\":\"7e9a3b6e-e55b-4500-85d4-f0d06ebbfa27\",\"type\":\"CDSView\"}},\"id\":\"f97690fb-24eb-42bc-a4fc-eb4bc3726972\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":null},\"id\":\"b1dc7ac4-0ac9-454b-8847-bb79563acc24\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":null},\"id\":\"45fb2672-8d60-43f7-bbf7-248205047c08\",\"type\":\"CDSView\"},{\"attributes\":{\"below\":[{\"id\":\"b7c97843-d0f6-45b3-8285-af4cd2fd336d\",\"type\":\"CategoricalAxis\"}],\"css_classes\":null,\"left\":[{\"id\":\"a096b7af-2c7a-4822-849b-0c4802c564ac\",\"type\":\"LinearAxis\"}],\"plot_height\":739,\"plot_width\":987,\"renderers\":[{\"id\":\"8e105077-8012-466c-8e07-38a8b907fba6\",\"type\":\"BoxAnnotation\"},{\"id\":\"c893d421-6aa6-4870-9c2a-b9129c70da5a\",\"type\":\"GlyphRenderer\"},{\"id\":\"e7d6ee54-d690-49dc-b75d-2c644a046576\",\"type\":\"GlyphRenderer\"},{\"id\":\"175e0b40-7d0e-4b4b-8975-6809ecdf4599\",\"type\":\"GlyphRenderer\"},{\"id\":\"67ac067b-177c-4389-99df-8d1114f76909\",\"type\":\"GlyphRenderer\"},{\"id\":\"fb47558e-43f3-4b5c-a126-01bf5c83c7de\",\"type\":\"GlyphRenderer\"},{\"id\":\"f97690fb-24eb-42bc-a4fc-eb4bc3726972\",\"type\":\"GlyphRenderer\"},{\"id\":\"fda25984-d7ff-43f7-8fdb-f2bda550102a\",\"type\":\"GlyphRenderer\"},{\"id\":\"b7dcee57-392b-49c6-8370-18af913b3c7d\",\"type\":\"GlyphRenderer\"},{\"id\":\"4a80872b-ff7e-4995-bf29-49baf19d9d01\",\"type\":\"GlyphRenderer\"},{\"id\":\"2fe13a6d-bd4f-4a83-b8a4-d4caf6b07106\",\"type\":\"GlyphRenderer\"},{\"id\":\"6bb1a88e-9713-4ece-8aa1-fce0dbd4a236\",\"type\":\"GlyphRenderer\"},{\"id\":\"c8ded361-787f-4498-91a6-6653c75206f6\",\"type\":\"GlyphRenderer\"},{\"id\":\"6d2666fe-a886-41cf-bb51-ef278eb6ea52\",\"type\":\"GlyphRenderer\"},{\"id\":\"ac1bd2f9-f541-4a32-9907-83e511dc9752\",\"type\":\"GlyphRenderer\"},{\"id\":\"1c3cd1c3-4bf5-4c68-9efb-622cde7cbfe1\",\"type\":\"GlyphRenderer\"},{\"id\":\"b7c97843-d0f6-45b3-8285-af4cd2fd336d\",\"type\":\"CategoricalAxis\"},{\"id\":\"a096b7af-2c7a-4822-849b-0c4802c564ac\",\"type\":\"LinearAxis\"},{\"id\":\"7499cedd-b987-4cc2-847a-05934c9ef3ff\",\"type\":\"Grid\"}],\"title\":{\"id\":\"78a827b4-de14-449b-85f3-152096e9263e\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"6ac7855b-5b74-4943-acc4-9c620d71e014\",\"type\":\"Toolbar\"},\"toolbar_location\":null,\"x_range\":{\"id\":\"b1a7065e-fecd-48cb-8db9-c1969eca1e8c\",\"type\":\"FactorRange\"},\"x_scale\":{\"id\":\"3810eb1b-c793-46bd-beb4-1559aae3c0c2\",\"type\":\"CategoricalScale\"},\"y_range\":{\"id\":\"80c39502-af2a-4fe0-9ca8-3acf0497836c\",\"type\":\"Range1d\"},\"y_scale\":{\"id\":\"9e2e7bed-e9be-4203-93ba-4ea409b8bdae\",\"type\":\"LinearScale\"}},\"id\":\"3d6407bc-042e-4a39-9677-11cc8c1c7e1d\",\"subtype\":\"Chart\",\"type\":\"Plot\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"line_color\",\"line_alpha\",\"color\",\"fill_alpha\",\"height\",\"width\",\"y\",\"x\",\"label\"],\"data\":{\"chart_index\":[{\"name\":\"Belgium\"}],\"color\":[\"#f22c40\"],\"fill_alpha\":[0.8],\"height\":[42511.0],\"label\":[{\"name\":\"Belgium\"}],\"line_alpha\":[1.0],\"line_color\":[\"white\"],\"name\":[\"Belgium\"],\"width\":[0.8],\"x\":[\"Belgium\"],\"y\":[21255.5]}},\"id\":\"8c70aa69-c52b-42eb-b971-7684adf4a37a\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":null},\"id\":\"06386e98-99a0-42a7-958f-4d2c8ad23b4a\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_alpha\":{\"field\":\"fill_alpha\"},\"fill_color\":{\"field\":\"color\"},\"height\":{\"field\":\"height\",\"units\":\"data\"},\"line_color\":{\"field\":\"line_color\"},\"width\":{\"field\":\"width\",\"units\":\"data\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"249715bd-027c-476c-b5e1-dcf9d064d774\",\"type\":\"Rect\"},{\"attributes\":{\"fill_alpha\":{\"field\":\"fill_alpha\"},\"fill_color\":{\"field\":\"color\"},\"height\":{\"field\":\"height\",\"units\":\"data\"},\"line_color\":{\"field\":\"line_color\"},\"width\":{\"field\":\"width\",\"units\":\"data\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"f0987e1d-f6ab-462e-a12a-bb272bf6fbfd\",\"type\":\"Rect\"},{\"attributes\":{\"fill_alpha\":{\"field\":\"fill_alpha\"},\"fill_color\":{\"field\":\"color\"},\"height\":{\"field\":\"height\",\"units\":\"data\"},\"line_color\":{\"field\":\"line_color\"},\"width\":{\"field\":\"width\",\"units\":\"data\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"aca9ecba-0f7f-41d0-80d6-8f0d9fbd240e\",\"type\":\"Rect\"},{\"attributes\":{\"axis_label\":\"Name\",\"formatter\":{\"id\":\"19149b76-324c-43be-8b1e-064078731db9\",\"type\":\"CategoricalTickFormatter\"},\"major_label_orientation\":0.7853981633974483,\"plot\":{\"id\":\"3d6407bc-042e-4a39-9677-11cc8c1c7e1d\",\"subtype\":\"Chart\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"88cfd927-c05f-4897-aaee-e10bc162c955\",\"type\":\"CategoricalTicker\"}},\"id\":\"b7c97843-d0f6-45b3-8285-af4cd2fd336d\",\"type\":\"CategoricalAxis\"},{\"attributes\":{\"data_source\":{\"id\":\"0e1edfed-2fde-4e43-84a6-ce9077bda823\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"84d08248-7c5a-48ad-827c-6691c5011bd8\",\"type\":\"Rect\"},\"hover_glyph\":null,\"muted_glyph\":null,\"view\":{\"id\":\"b89a2851-4434-4701-a5d1-658561aa8a92\",\"type\":\"CDSView\"}},\"id\":\"fda25984-d7ff-43f7-8fdb-f2bda550102a\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"callback\":null,\"factors\":[\"Philippines\",\"Belgium\",\"Spain\",\"Poland\",\"Bangladesh\",\"United States\",\"China\",\"Romania\",\"Ukraine\",\"United Kingdom\",\"Switzerland\",\"Egypt\",\"France\",\"Sweden\",\"Germany\"]},\"id\":\"b1a7065e-fecd-48cb-8db9-c1969eca1e8c\",\"type\":\"FactorRange\"},{\"attributes\":{\"fill_alpha\":{\"field\":\"fill_alpha\"},\"fill_color\":{\"field\":\"color\"},\"height\":{\"field\":\"height\",\"units\":\"data\"},\"line_color\":{\"field\":\"line_color\"},\"width\":{\"field\":\"width\",\"units\":\"data\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"836bad5c-b958-4501-b05b-df630d935e04\",\"type\":\"Rect\"},{\"attributes\":{\"source\":null},\"id\":\"7e9a3b6e-e55b-4500-85d4-f0d06ebbfa27\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":null},\"id\":\"39ddb9e8-4eb6-4d01-99fe-9e66107e62a7\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":null},\"id\":\"0acc53fc-b9a6-45be-86b3-57e0f28ef767\",\"type\":\"CDSView\"},{\"attributes\":{\"sizing_mode\":\"scale_width\",\"toolbar_location\":\"above\",\"tools\":[{\"id\":\"f4bf8cb4-8be8-498b-9114-6c61476beba7\",\"type\":\"PanTool\"},{\"id\":\"65f7ae6c-ae80-48bb-a561-e58028f388c3\",\"type\":\"WheelZoomTool\"},{\"id\":\"f4b5c6c1-7b23-4f9f-a6e1-eea8e3fbb873\",\"type\":\"BoxZoomTool\"},{\"id\":\"73c32fe8-c3d6-4fd3-b486-3f8d1f7a6b5f\",\"type\":\"SaveTool\"},{\"id\":\"689228a9-0511-4ffc-9078-d788d9397ad9\",\"type\":\"ResetTool\"},{\"id\":\"33cce57f-1906-4d0a-922c-24899cdcd839\",\"type\":\"HelpTool\"}]},\"id\":\"9e051597-40c1-4912-8550-730ffdabc6a6\",\"type\":\"ToolbarBox\"},{\"attributes\":{\"source\":null},\"id\":\"096e93e9-a90f-4032-80f9-4c4de832f369\",\"type\":\"CDSView\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"line_color\",\"line_alpha\",\"color\",\"fill_alpha\",\"height\",\"width\",\"y\",\"x\",\"label\"],\"data\":{\"chart_index\":[{\"name\":\"Ukraine\"}],\"color\":[\"#f22c40\"],\"fill_alpha\":[0.8],\"height\":[87669.0],\"label\":[{\"name\":\"Ukraine\"}],\"line_alpha\":[1.0],\"line_color\":[\"white\"],\"name\":[\"Ukraine\"],\"width\":[0.8],\"x\":[\"Ukraine\"],\"y\":[43834.5]}},\"id\":\"f5a8df69-2e39-4b29-ad92-eaf5bc37cdcd\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data_source\":{\"id\":\"f3ac18a9-8929-4a6a-9fdf-5d572b797f0f\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"aca9ecba-0f7f-41d0-80d6-8f0d9fbd240e\",\"type\":\"Rect\"},\"hover_glyph\":null,\"muted_glyph\":null,\"view\":{\"id\":\"06386e98-99a0-42a7-958f-4d2c8ad23b4a\",\"type\":\"CDSView\"}},\"id\":\"ac1bd2f9-f541-4a32-9907-83e511dc9752\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"overlay\":{\"id\":\"8e105077-8012-466c-8e07-38a8b907fba6\",\"type\":\"BoxAnnotation\"}},\"id\":\"f4b5c6c1-7b23-4f9f-a6e1-eea8e3fbb873\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"plot\":null,\"text\":null},\"id\":\"78a827b4-de14-449b-85f3-152096e9263e\",\"type\":\"Title\"},{\"attributes\":{\"dimension\":1,\"plot\":{\"id\":\"3d6407bc-042e-4a39-9677-11cc8c1c7e1d\",\"subtype\":\"Chart\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"1cb03b38-db34-4ca1-8376-85486a6eddd2\",\"type\":\"BasicTicker\"}},\"id\":\"7499cedd-b987-4cc2-847a-05934c9ef3ff\",\"type\":\"Grid\"},{\"attributes\":{\"data_source\":{\"id\":\"31cd1018-a75c-465f-a1a4-7785fc3695cb\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"66b06ab7-b927-4a8d-b894-55f403a36f11\",\"type\":\"Rect\"},\"hover_glyph\":null,\"muted_glyph\":null,\"view\":{\"id\":\"0b4f3a48-4f6b-412c-a558-a9b66748c281\",\"type\":\"CDSView\"}},\"id\":\"fb47558e-43f3-4b5c-a126-01bf5c83c7de\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":null},\"id\":\"be681197-0a38-4bb4-9e2f-dd0b631d7f11\",\"type\":\"CDSView\"},{\"attributes\":{\"data_source\":{\"id\":\"8c70aa69-c52b-42eb-b971-7684adf4a37a\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"fb12182c-c960-40e3-b5da-2d8939f32fed\",\"type\":\"Rect\"},\"hover_glyph\":null,\"muted_glyph\":null,\"view\":{\"id\":\"92f4709e-c469-4ab9-b941-49e16c617807\",\"type\":\"CDSView\"}},\"id\":\"e7d6ee54-d690-49dc-b75d-2c644a046576\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"line_color\",\"line_alpha\",\"color\",\"fill_alpha\",\"height\",\"width\",\"y\",\"x\",\"label\"],\"data\":{\"chart_index\":[{\"name\":\"Egypt\"}],\"color\":[\"#f22c40\"],\"fill_alpha\":[0.8],\"height\":[144565.0],\"label\":[{\"name\":\"Egypt\"}],\"line_alpha\":[1.0],\"line_color\":[\"white\"],\"name\":[\"Egypt\"],\"width\":[0.8],\"x\":[\"Egypt\"],\"y\":[72282.5]}},\"id\":\"0df986f5-461d-4676-876e-437072ab5ad1\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"f4bf8cb4-8be8-498b-9114-6c61476beba7\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"88cfd927-c05f-4897-aaee-e10bc162c955\",\"type\":\"CategoricalTicker\"},{\"attributes\":{\"callback\":null,\"column_names\":[\"line_color\",\"line_alpha\",\"color\",\"fill_alpha\",\"height\",\"width\",\"y\",\"x\",\"label\"],\"data\":{\"chart_index\":[{\"name\":\"Spain\"}],\"color\":[\"#f22c40\"],\"fill_alpha\":[0.8],\"height\":[44671.0],\"label\":[{\"name\":\"Spain\"}],\"line_alpha\":[1.0],\"line_color\":[\"white\"],\"name\":[\"Spain\"],\"width\":[0.8],\"x\":[\"Spain\"],\"y\":[22335.5]}},\"id\":\"095ea097-0046-47d6-8e19-b407bb57d01f\",\"type\":\"ColumnDataSource\"}],\"root_ids\":[\"5dcd9953-901f-4641-aadf-ab1efc4cc94e\"]},\"title\":\"Bokeh Application\",\"version\":\"0.12.7\"}};\n var render_items = [{\"docid\":\"e1c4599f-db2d-456c-9b8e-8f86be11b0bc\",\"elementid\":\"0db4a7b9-fa60-437b-b334-a7ffe20f77da\",\"modelid\":\"5dcd9953-901f-4641-aadf-ab1efc4cc94e\"}];\n \n Bokeh.embed.embed_items(docs_json, render_items);\n };\n if (document.readyState != \"loading\") fn();\n else document.addEventListener(\"DOMContentLoaded\", fn);\n })();\n },\n function(Bokeh) {\n }\n ];\n \n function run_inline_js() {\n \n if ((root.Bokeh !== undefined) || (force === true)) {\n for (var i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }if (force === true) {\n display_loaded();\n }} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n } else if (force !== true) {\n var cell = $(document.getElementById(\"0db4a7b9-fa60-437b-b334-a7ffe20f77da\")).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\n \n }\n \n if (root._bokeh_is_loading === 0) {\n console.log(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(js_urls, function() {\n console.log(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n }(window));\n</script>\n \n \n </div>\n ", | |
"text/plain": "<IPython.core.display.HTML object>" | |
}, | |
"metadata": {} | |
} | |
], | |
"source": "display(dfCountryCodeTranslatedSmall)" | |
}, | |
{ | |
"source": "### Creating heat map based on the number of activity for each sector of the grid", | |
"cell_type": "markdown", | |
"metadata": {} | |
}, | |
{ | |
"source": "### Creating a vector with grid sector ids", | |
"cell_type": "markdown", | |
"metadata": {} | |
}, | |
{ | |
"execution_count": 57, | |
"cell_type": "code", | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": "sectors = spark.createDataFrame(range(1, 10001), IntegerType())" | |
}, | |
{ | |
"execution_count": 58, | |
"cell_type": "code", | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": "activity_count_by_sector = telco_data_full\\\n .groupBy(\"squareId\")\\\n .count()\\\n .orderBy(\"squareId\", ascending=False)" | |
}, | |
{ | |
"execution_count": 59, | |
"cell_type": "code", | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": "df_heat = sectors\\\n .join(activity_count_by_sector, sectors.value == activity_count_by_sector.squareId, 'left')\\\n .fillna(0.0)\\\n .select('value', 'count')\\\n .orderBy('value')" | |
}, | |
{ | |
"execution_count": 60, | |
"cell_type": "code", | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": "heat_count_list = df_heat.select(\"count\").rdd.flatMap(lambda x: x).collect()" | |
}, | |
{ | |
"execution_count": 61, | |
"cell_type": "code", | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": "heat_count_list_splitted = np.array_split(heat_count_list, 100)\nheat_count_list_splitted.reverse()" | |
}, | |
{ | |
"execution_count": 62, | |
"cell_type": "code", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "display_data", | |
"data": { | |
"image/png": "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\nBjohhBBC2GjOkfQ7ks7rdtRav7/bLqX8mvqLJtfVWt3E6e9J+pFa60dKKeeXUr691vqBtU6cGbYQ\nQghhTOy7Z/n/5lBrvUhrh+p7qaQ/n0kPVn5LKUdLenit9SPTXedJ+p55586MTgghhDAmtuDS1VqU\nUp4t6dZa62wM152llMs1sRv7melA6Rj17c/2aCj1GrDUgc7DsO1M1iiadOI0igtbxGEu0jZpmd5y\n10yxnLvmG5B2RmIUy9FYzEVhpqCuxRzQiU5bhI0UTTpROEWLTvDH+msxYXQGhoRiVnd9rD9nYkah\nrDMn3IZtdw/8OeLqhnXu8rCTOmHorUhT8OpE9BS8unbBMnURuymgdj/ZeGyK/CXpdqS/bLYprnVl\nwWt252LdUDi7mvh5Fhd1/EykrzV5eGwnFOfXVEvbubPhOK6ddmXYlYm7d5Y769MJ/1tepiCur/Hc\nrn3dOOczbl/L98/xDcf5jMlz/xpmbAlepv5szi2Sjq21fmGqyfmbUsrjteD7SZnRCSGEEMbE/WhG\np5RysKTv08yLjLXWuzUd09ZaP1pKuV4T0fIeSY+d+fgOTQZFaxKNTgghhBCWwTYNZ2VeIOnqWuvX\nBiyllCNLKQdNt0+QdJKkT9dab5V0VynlaaWUbZJeIem9806aGZ0QQghhTGzBGZ1SyjskPUfSEaWU\nGyW9udZ6jqR/r/6ylSR9s6RfKKXcrYna4TW11m4F/rXqv17+/nnnXupA51HYdmubxAVUpKmTW6en\nbqDlRt25+Dm39sv1aadLoQmdM5jj+jDTbv2aebabbWfORpiHmg9puC7v1vK5j9ofaaj/+bzJw3Km\nwVuLFsldn9M5EU5zPtrkmS2vh8jrW1rME2ng5oIasq249sU+8A9IO50KdWJu8ZvaFXefTutA5gUd\nlYbarYPNdssUNNuG05s5Pcss7j7ZJp028IMNeYirc5apqxuWhStT1ru7r27fw9bIw+dXi/kehROu\nP7aYv/Jz7vpYFu5rvuWr/7FIM5CxNPxucToe90z7eqfW+vJV9r/K7HuPpPeskv9ySafvz7kzoxNC\nCCGMiS04o7OZZKATQgghjIkMdHrMHeiUUnZoYspztCazy39Ya31rKeVwSe/SJMzObkkvrbXOmxEO\nIYQQQlgaLUve90j6yVrr4yU9U9LrSimPk/QGSRfWWosmS9Nv3LjLDCGEEEITW9AZeTOZO6MzfZ3r\n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\na1GGHo1e/DQAAAAAAElFTkSuQmCC\n", | |
"text/plain": "<matplotlib.figure.Figure at 0x7f973c050910>" | |
}, | |
"metadata": {} | |
} | |
], | |
"source": "fig, ax = plt.subplots()\ncax = fig.add_axes([0.95, 0.125, 0.05, 0.775])\n\nim = ax.imshow(heat_count_list_splitted, cmap='gist_heat', interpolation='nearest')\nfig.colorbar(im, cax=cax, orientation='vertical')\nfig.set_size_inches(8,8)\nplt.show()" | |
}, | |
{ | |
"source": "### Making connection of the heat map with the map of the city of Milan", | |
"cell_type": "markdown", | |
"metadata": {} | |
}, | |
{ | |
"execution_count": 63, | |
"cell_type": "code", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"output_type": "stream", | |
"name": "stdout", | |
"text": "+--------+---------+--------+\n|squareId| lat| lon|\n+--------+---------+--------+\n| 1|45.357743|9.012991|\n| 2|45.357743|9.015991|\n| 3|45.357743|9.018992|\n| 4|45.357743|9.021992|\n| 5|45.357743|9.024993|\n+--------+---------+--------+\nonly showing top 5 rows\n\n" | |
} | |
], | |
"source": "sectors_geoloc = spark.read\\\n .format('org.apache.spark.sql.execution.datasources.csv.CSVFileFormat')\\\n .option('header', 'true')\\\n .load('swift://TelefonicaCHI.' + name + '/milano-grid.csv')\nsectors_geoloc.show(5)" | |
}, | |
{ | |
"execution_count": 64, | |
"cell_type": "code", | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": "sectors_geoloc_tmp = sectors_geoloc.withColumnRenamed(\"squareId\", \"squareId_2\")" | |
}, | |
{ | |
"execution_count": 65, | |
"cell_type": "code", | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": "df_heat_folium_tmp = sectors_geoloc_tmp\\\n .join(activity_count_by_sector, sectors_geoloc_tmp.squareId_2 == activity_count_by_sector.squareId, 'left')\\\n .fillna(0.0)" | |
}, | |
{ | |
"execution_count": 66, | |
"cell_type": "code", | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": "df_heat_folium = df_heat_folium_tmp.select('*').orderBy('count', ascending=False).limit(150).toPandas()" | |
}, | |
{ | |
"execution_count": 67, | |
"cell_type": "code", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"execution_count": 67, | |
"metadata": {}, | |
"data": { | |
"text/html": "<div>\n<style>\n .dataframe thead tr:only-child th {\n text-align: right;\n }\n\n .dataframe thead th {\n text-align: left;\n }\n\n .dataframe tbody tr th {\n vertical-align: top;\n }\n</style>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>squareId_2</th>\n <th>lat</th>\n <th>lon</th>\n <th>squareId</th>\n <th>count</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>6165</td>\n <td>45.486776</td>\n <td>9.205018</td>\n <td>6165</td>\n <td>2130</td>\n </tr>\n <tr>\n <th>1</th>\n <td>6064</td>\n <td>45.484660</td>\n <td>9.202017</td>\n <td>6064</td>\n <td>2041</td>\n </tr>\n <tr>\n <th>2</th>\n <td>5161</td>\n <td>45.465623</td>\n <td>9.193016</td>\n <td>5161</td>\n <td>2041</td>\n </tr>\n <tr>\n <th>3</th>\n <td>5160</td>\n <td>45.465623</td>\n <td>9.190016</td>\n <td>5160</td>\n <td>1890</td>\n </tr>\n <tr>\n <th>4</th>\n <td>6164</td>\n <td>45.486776</td>\n <td>9.202017</td>\n <td>6164</td>\n <td>1824</td>\n </tr>\n </tbody>\n</table>\n</div>", | |
"text/plain": " squareId_2 lat lon squareId count\n0 6165 45.486776 9.205018 6165 2130\n1 6064 45.484660 9.202017 6064 2041\n2 5161 45.465623 9.193016 5161 2041\n3 5160 45.465623 9.190016 5160 1890\n4 6164 45.486776 9.202017 6164 1824" | |
}, | |
"output_type": "execute_result" | |
} | |
], | |
"source": "df_heat_folium.head(5)" | |
}, | |
{ | |
"execution_count": 68, | |
"cell_type": "code", | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": "lats = [float(item) for item in df_heat_folium.lat]\nlons = [float(item) for item in df_heat_folium.lon]\nmag = [float(item) for item in df_heat_folium['count']]" | |
}, | |
{ | |
"execution_count": 1, | |
"cell_type": "code", | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"ename": "ImportError", | |
"evalue": "No module named 'folium'", | |
"traceback": [ | |
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", | |
"\u001b[0;31mImportError\u001b[0m Traceback (most recent call last)", | |
"\u001b[0;32m<ipython-input-1-b7b1093c1bd7>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0;32mimport\u001b[0m \u001b[0mfolium\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mfolium\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mplugins\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0mschools_heatmap\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mfolium\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mMap\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlocation\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m45.465033\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m9.186578\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mzoom_start\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m12\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0mschools_heatmap\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0madd_child\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mplugins\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mHeatMap\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mzip\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlats\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlons\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmag\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mradius\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m9\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", | |
"\u001b[0;31mImportError\u001b[0m: No module named 'folium'" | |
], | |
"output_type": "error" | |
} | |
], | |
"source": "import folium\nfrom folium import plugins\n\nschools_heatmap = folium.Map(location=[45.465033, 9.186578], zoom_start=12)\nschools_heatmap.add_child(plugins.HeatMap(zip(lats, lons, mag), radius = 9))\nschools_heatmap" | |
}, | |
{ | |
"execution_count": null, | |
"cell_type": "code", | |
"metadata": { | |
"collapsed": true | |
}, | |
"outputs": [], | |
"source": "" | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "Python 3.5", | |
"name": "python3", | |
"language": "python" | |
}, | |
"language_info": { | |
"mimetype": "text/x-python", | |
"nbconvert_exporter": "python", | |
"version": "3.5.5", | |
"name": "python", | |
"file_extension": ".py", | |
"pygments_lexer": "ipython3", | |
"codemirror_mode": { | |
"version": 3, | |
"name": "ipython" | |
} | |
} | |
}, | |
"nbformat": 4 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment