Skip to content

Instantly share code, notes, and snippets.

@preinoso
Created January 10, 2018 02:29
Show Gist options
  • Save preinoso/21fac9e51b152bc8d78526ee57fc24d4 to your computer and use it in GitHub Desktop.
Save preinoso/21fac9e51b152bc8d78526ee57fc24d4 to your computer and use it in GitHub Desktop.
ejemplo DSX
Display the source blob
Display the rendered blob
Raw
{
"nbformat": 4,
"nbformat_minor": 1,
"cells": [
{
"source": "## Predict Customer Churn Use Case Implementation\nThe objective is to follow the CRISP-DM methodology to build a model to predict customer churn\n![CRISP-DM](https://raw.githubusercontent.com/yfphoon/dsx_demo/master/crisp_dm.png)\n\n### Step 1: Connect to Object Storage\n\nWe start with connecting to Object Storage. Object Storage is the Bluemix environment for storing flat files. \n\nThe following code has been generated by DSX.",
"cell_type": "markdown",
"metadata": {}
},
{
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"cell_type": "code",
"source": "# The code was removed by DSX for sharing."
},
{
"source": "### Step 2: Load files",
"cell_type": "markdown",
"metadata": {}
},
{
"execution_count": 2,
"metadata": {},
"outputs": [],
"cell_type": "code",
"source": "# Customer Information\ncustomer = spark.read.format('csv')\\\n .options(header='true', inferschema='true')\\\n .load('swift://PredictChurn.' + name + '/customer.csv')\n \n#Churn information \ncustomer_churn = spark.read.format('csv')\\\n .options(header='true', inferschema='true')\\\n .load('swift://PredictChurn.' + name + '/churn.csv')"
},
{
"source": "### Step 3: Merge Files\n",
"cell_type": "markdown",
"metadata": {}
},
{
"execution_count": 3,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"text/plain": " ID Gender Status Children Est Income Car Owner Age LongDistance \\\n0 1 F S 1 38000.00 N 24.393333 23.56 \n1 6 M M 2 29616.00 N 49.426667 29.78 \n2 8 M M 0 19732.80 N 50.673333 24.81 \n3 11 M S 2 96.33 N 56.473333 26.13 \n4 14 F M 2 52004.80 N 25.140000 5.03 \n\n International Local Dropped Paymethod LocalBilltype \\\n0 0 206.08 0 CC Budget \n1 0 45.50 0 CH FreeLocal \n2 0 22.44 0 CC FreeLocal \n3 0 32.88 1 CC Budget \n4 0 23.11 0 CH Budget \n\n LongDistanceBilltype Usage RatePlan CHURN \n0 Intnl_discount 229.64 3 T \n1 Standard 75.29 2 F \n2 Standard 47.25 3 F \n3 Standard 59.01 1 F \n4 Intnl_discount 28.14 1 F ",
"text/html": "<div>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>ID</th>\n <th>Gender</th>\n <th>Status</th>\n <th>Children</th>\n <th>Est Income</th>\n <th>Car Owner</th>\n <th>Age</th>\n <th>LongDistance</th>\n <th>International</th>\n <th>Local</th>\n <th>Dropped</th>\n <th>Paymethod</th>\n <th>LocalBilltype</th>\n <th>LongDistanceBilltype</th>\n <th>Usage</th>\n <th>RatePlan</th>\n <th>CHURN</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>1</td>\n <td>F</td>\n <td>S</td>\n <td>1</td>\n <td>38000.00</td>\n <td>N</td>\n <td>24.393333</td>\n <td>23.56</td>\n <td>0</td>\n <td>206.08</td>\n <td>0</td>\n <td>CC</td>\n <td>Budget</td>\n <td>Intnl_discount</td>\n <td>229.64</td>\n <td>3</td>\n <td>T</td>\n </tr>\n <tr>\n <th>1</th>\n <td>6</td>\n <td>M</td>\n <td>M</td>\n <td>2</td>\n <td>29616.00</td>\n <td>N</td>\n <td>49.426667</td>\n <td>29.78</td>\n <td>0</td>\n <td>45.50</td>\n <td>0</td>\n <td>CH</td>\n <td>FreeLocal</td>\n <td>Standard</td>\n <td>75.29</td>\n <td>2</td>\n <td>F</td>\n </tr>\n <tr>\n <th>2</th>\n <td>8</td>\n <td>M</td>\n <td>M</td>\n <td>0</td>\n <td>19732.80</td>\n <td>N</td>\n <td>50.673333</td>\n <td>24.81</td>\n <td>0</td>\n <td>22.44</td>\n <td>0</td>\n <td>CC</td>\n <td>FreeLocal</td>\n <td>Standard</td>\n <td>47.25</td>\n <td>3</td>\n <td>F</td>\n </tr>\n <tr>\n <th>3</th>\n <td>11</td>\n <td>M</td>\n <td>S</td>\n <td>2</td>\n <td>96.33</td>\n <td>N</td>\n <td>56.473333</td>\n <td>26.13</td>\n <td>0</td>\n <td>32.88</td>\n <td>1</td>\n <td>CC</td>\n <td>Budget</td>\n <td>Standard</td>\n <td>59.01</td>\n <td>1</td>\n <td>F</td>\n </tr>\n <tr>\n <th>4</th>\n <td>14</td>\n <td>F</td>\n <td>M</td>\n <td>2</td>\n <td>52004.80</td>\n <td>N</td>\n <td>25.140000</td>\n <td>5.03</td>\n <td>0</td>\n <td>23.11</td>\n <td>0</td>\n <td>CH</td>\n <td>Budget</td>\n <td>Intnl_discount</td>\n <td>28.14</td>\n <td>1</td>\n <td>F</td>\n </tr>\n </tbody>\n</table>\n</div>"
},
"execution_count": 3,
"output_type": "execute_result",
"metadata": {}
}
],
"cell_type": "code",
"source": "merged=customer.join(customer_churn,customer['ID']==customer_churn['ID']).select(customer['*'],customer_churn['CHURN'])\nmerged.toPandas().head()"
},
{
"source": "### Step 4: Rename some columns\nThis step is not a requirement, it just makes some columns names simpler to type with no spaces",
"cell_type": "markdown",
"metadata": {}
},
{
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": " ID Gender Status Children EstIncome CarOwner Age LongDistance \\\n0 1 F S 1 38000.00 N 24.393333 23.56 \n1 6 M M 2 29616.00 N 49.426667 29.78 \n2 8 M M 0 19732.80 N 50.673333 24.81 \n3 11 M S 2 96.33 N 56.473333 26.13 \n4 14 F M 2 52004.80 N 25.140000 5.03 \n\n International Local Dropped Paymethod LocalBilltype \\\n0 0 206.08 0 CC Budget \n1 0 45.50 0 CH FreeLocal \n2 0 22.44 0 CC FreeLocal \n3 0 32.88 1 CC Budget \n4 0 23.11 0 CH Budget \n\n LongDistanceBilltype Usage RatePlan CHURN \n0 Intnl_discount 229.64 3 T \n1 Standard 75.29 2 F \n2 Standard 47.25 3 F \n3 Standard 59.01 1 F \n4 Intnl_discount 28.14 1 F ",
"text/html": "<div>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>ID</th>\n <th>Gender</th>\n <th>Status</th>\n <th>Children</th>\n <th>EstIncome</th>\n <th>CarOwner</th>\n <th>Age</th>\n <th>LongDistance</th>\n <th>International</th>\n <th>Local</th>\n <th>Dropped</th>\n <th>Paymethod</th>\n <th>LocalBilltype</th>\n <th>LongDistanceBilltype</th>\n <th>Usage</th>\n <th>RatePlan</th>\n <th>CHURN</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>1</td>\n <td>F</td>\n <td>S</td>\n <td>1</td>\n <td>38000.00</td>\n <td>N</td>\n <td>24.393333</td>\n <td>23.56</td>\n <td>0</td>\n <td>206.08</td>\n <td>0</td>\n <td>CC</td>\n <td>Budget</td>\n <td>Intnl_discount</td>\n <td>229.64</td>\n <td>3</td>\n <td>T</td>\n </tr>\n <tr>\n <th>1</th>\n <td>6</td>\n <td>M</td>\n <td>M</td>\n <td>2</td>\n <td>29616.00</td>\n <td>N</td>\n <td>49.426667</td>\n <td>29.78</td>\n <td>0</td>\n <td>45.50</td>\n <td>0</td>\n <td>CH</td>\n <td>FreeLocal</td>\n <td>Standard</td>\n <td>75.29</td>\n <td>2</td>\n <td>F</td>\n </tr>\n <tr>\n <th>2</th>\n <td>8</td>\n <td>M</td>\n <td>M</td>\n <td>0</td>\n <td>19732.80</td>\n <td>N</td>\n <td>50.673333</td>\n <td>24.81</td>\n <td>0</td>\n <td>22.44</td>\n <td>0</td>\n <td>CC</td>\n <td>FreeLocal</td>\n <td>Standard</td>\n <td>47.25</td>\n <td>3</td>\n <td>F</td>\n </tr>\n <tr>\n <th>3</th>\n <td>11</td>\n <td>M</td>\n <td>S</td>\n <td>2</td>\n <td>96.33</td>\n <td>N</td>\n <td>56.473333</td>\n <td>26.13</td>\n <td>0</td>\n <td>32.88</td>\n <td>1</td>\n <td>CC</td>\n <td>Budget</td>\n <td>Standard</td>\n <td>59.01</td>\n <td>1</td>\n <td>F</td>\n </tr>\n <tr>\n <th>4</th>\n <td>14</td>\n <td>F</td>\n <td>M</td>\n <td>2</td>\n <td>52004.80</td>\n <td>N</td>\n <td>25.140000</td>\n <td>5.03</td>\n <td>0</td>\n <td>23.11</td>\n <td>0</td>\n <td>CH</td>\n <td>Budget</td>\n <td>Intnl_discount</td>\n <td>28.14</td>\n <td>1</td>\n <td>F</td>\n </tr>\n </tbody>\n</table>\n</div>"
},
"execution_count": 4,
"output_type": "execute_result",
"metadata": {}
}
],
"cell_type": "code",
"source": "merged = merged.withColumnRenamed(\"Est Income\", \"EstIncome\").withColumnRenamed(\"Car Owner\",\"CarOwner\")\nmerged.toPandas().head()"
},
{
"source": "### Step 5: Data understanding",
"cell_type": "markdown",
"metadata": {}
},
{
"source": "The Brunel Visualization Language is a highly succinct and novel language that defines interactive data visualizations based on tabular data. The language is well suited for both data scientists and more aggressive business users. The system interprets the language and produces visualizations using the user's choice of existing lower-level visualization technologies typically used by application engineers such as RAVE or D3. \n\nMore information about Brunel Visualization: https://github.com/Brunel-Visualization/Brunel/wiki\n\nTry Brunel visualization here: http://brunel.mybluemix.net/gallery_app/renderer",
"cell_type": "markdown",
"metadata": {}
},
{
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": "<IPython.core.display.HTML object>",
"text/html": "<!--\n ~ Copyright (c) 2015 IBM Corporation and others.\n ~\n ~ Licensed under the Apache License, Version 2.0 (the \"License\");\n ~ You may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ http://www.apache.org/licenses/LICENSE-2.0\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" BASIS,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n\n<link rel=\"stylesheet\" type=\"text/css\" href=\"/data/jupyter2/e1f377e3-d279-45fc-8191-4754435a94b5/nbextensions/brunel_ext/brunel.2.3.css\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"/data/jupyter2/e1f377e3-d279-45fc-8191-4754435a94b5/nbextensions/brunel_ext/sumoselect.css\">\n\n<style>\n \n</style>\n\n<div id=\"controlsidfe34191e-52cd-11e7-9ed8-002590fb6500\" class=\"brunel\"/>\n<svg id=\"visidfe341676-52cd-11e7-9ed8-002590fb6500\" width=\"1100\" height=\"400\"></svg>"
},
"output_type": "display_data",
"metadata": {}
},
{
"data": {
"application/javascript": "/*\n * Copyright (c) 2015 IBM Corporation and others.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * You may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nrequire.config({\n waitSeconds: 60,\n paths: {\n 'd3': '//cdnjs.cloudflare.com/ajax/libs/d3/4.2.1/d3.min',\n 'topojson': '//cdnjs.cloudflare.com/ajax/libs/topojson/1.6.20/topojson.min',\n 'brunel' : '/data/jupyter2/e1f377e3-d279-45fc-8191-4754435a94b5/nbextensions/brunel_ext/brunel.2.3.min',\n 'brunelControls' : '/data/jupyter2/e1f377e3-d279-45fc-8191-4754435a94b5/nbextensions/brunel_ext/brunel.controls.2.3.min'\n },\n shim: {\n 'brunel' : {\n exports: 'BrunelD3',\n deps: ['d3', 'topojson'],\n init: function() {\n return {\n BrunelD3 : BrunelD3,\n BrunelData : BrunelData\n }\n }\n },\n 'brunelControls' : {\n exports: 'BrunelEventHandlers',\n init: function() {\n return {\n BrunelEventHandlers: BrunelEventHandlers,\n BrunelJQueryControlFactory: BrunelJQueryControlFactory\n }\n }\n }\n\n }\n\n});\n\nrequire([\"d3\"], function(d3) {\n require([\"brunel\", \"brunelControls\"], function(brunel, brunelControls) {\n function BrunelVis(visId) {\n \"use strict\"; // strict mode\n var datasets = [], // array of datasets for the original data\n pre = function(d, i) { return d }, // default pre-process does nothing\n post = function(d, i) { return d }, // default post-process does nothing\n transitionTime = 200, // transition time for animations\n charts = [], // the charts in the system\n vis = d3.select('#' + visId).attr('class', 'brunel'); // the SVG container\n\n BrunelD3.addDefinitions(vis); // ensure standard symbols present\n\n // Define chart #1 in the visualization //////////////////////////////////////////////////////////\n\n charts[0] = function(parentNode, filterRows) {\n var geom = BrunelD3.geometry(parentNode || vis.node(), 0, 0, 1, 0.5, 5, 65, 37, 104),\n elements = []; // array of elements in this chart\n\n // Define groups for the chart parts ///////////////////////////////////////////////////////////\n\n var chart = vis.append('g').attr('class', 'chart1')\n .attr('transform','translate(' + geom.chart_left + ',' + geom.chart_top + ')');\n var overlay = chart.append('g').attr('class', 'element').attr('class', 'overlay');\n var zoom = d3.zoom().scaleExtent([1/3,3]);\n var zoomNode = overlay.append('rect').attr('class', 'overlay')\n .attr('x', geom.inner_left).attr('y', geom.inner_top)\n .attr('width', geom.inner_rawWidth).attr('height', geom.inner_rawHeight)\n .style('cursor', 'move').call(zoom)\n .node();\n zoomNode.__zoom = d3.zoomIdentity;\n chart.append('rect').attr('class', 'background').attr('width', geom.chart_right-geom.chart_left).attr('height', geom.chart_bottom-geom.chart_top);\n var interior = chart.append('g').attr('class', 'interior zoomNone')\n .attr('transform','translate(' + geom.inner_left + ',' + geom.inner_top + ')')\n .attr('clip-path', 'url(#clip_visidfe341676-52cd-11e7-9ed8-002590fb6500_chart1_inner)');\n interior.append('rect').attr('class', 'inner').attr('width', geom.inner_width).attr('height', geom.inner_height);\n var gridGroup = interior.append('g').attr('class', 'grid');\n var axes = chart.append('g').attr('class', 'axis')\n .attr('transform','translate(' + geom.inner_left + ',' + geom.inner_top + ')');\n var legends = chart.append('g').attr('class', 'legend')\n .attr('transform','translate(' + (geom.chart_right-geom.chart_left - 3) + ',' + 0 + ')');\n vis.append('clipPath').attr('id', 'clip_visidfe341676-52cd-11e7-9ed8-002590fb6500_chart1_inner').append('rect')\n .attr('x', 0).attr('y', 0)\n .attr('width', geom.inner_rawWidth+1).attr('height', geom.inner_rawHeight+1);\n\n // Scales //////////////////////////////////////////////////////////////////////////////////////\n\n var scale_x = d3.scalePoint().padding(0.5)\n .domain(['F', 'T'])\n .range([0, geom.inner_width]);\n var scale_inner = d3.scaleLinear().domain([0,1])\n .range([-0.5, 0.5]);\n var scale_y = d3.scaleLinear().domain([0, 120000.01])\n .range([geom.inner_height, 0]);\n var base_scales = [scale_x, scale_y]; // untransformed original scales\n\n // Axes ////////////////////////////////////////////////////////////////////////////////////////\n\n axes.append('g').attr('class', 'x axis')\n .attr('transform','translate(0,' + geom.inner_rawHeight + ')')\n .attr('clip-path', 'url(#clip_visidfe341676-52cd-11e7-9ed8-002590fb6500_chart1_haxis)');\n vis.append('clipPath').attr('id', 'clip_visidfe341676-52cd-11e7-9ed8-002590fb6500_chart1_haxis').append('polyline')\n .attr('points', '-1,-1000, -1,-1 -5,5, -1000,5, -100,1000, 10000,1000 10000,-1000');\n axes.select('g.axis.x').append('text').attr('class', 'title').text('CHURN').style('text-anchor', 'middle')\n .attr('x',geom.inner_rawWidth/2)\n .attr('y', geom.inner_bottom - 2.0).attr('dy','-0.27em');\n axes.append('g').attr('class', 'y axis')\n .attr('clip-path', 'url(#clip_visidfe341676-52cd-11e7-9ed8-002590fb6500_chart1_vaxis)');\n vis.append('clipPath').attr('id', 'clip_visidfe341676-52cd-11e7-9ed8-002590fb6500_chart1_vaxis').append('polyline')\n .attr('points', '-1000,-10000, 10000,-10000, 10000,' + (geom.inner_rawHeight+1) + ', -1,' + (geom.inner_rawHeight+1) + ', -1,' + (geom.inner_rawHeight+5) + ', -1000,' + (geom.inner_rawHeight+5) );\n axes.select('g.axis.y').append('text').attr('class', 'title').text('Mean(Est Income)').style('text-anchor', 'middle')\n .attr('x',-geom.inner_rawHeight/2)\n .attr('y', 4-geom.inner_left).attr('dy', '0.7em').attr('transform', 'rotate(270)');\n\n var axis_bottom = d3.axisBottom(scale_x).ticks(Math.min(10, Math.round(geom.inner_width / 16.5)));\n var axis_left = d3.axisLeft(scale_y).ticks(Math.min(10, Math.round(geom.inner_width / 20)));\n\n function buildAxes(time) {\n axis_bottom.tickValues(BrunelD3.filterTicks(scale_x))\n var axis_x = axes.select('g.axis.x');\n BrunelD3.transition(axis_x, time).call(axis_bottom.scale(scale_x));\n var axis_y = axes.select('g.axis.y');\n BrunelD3.transition(axis_y, time).call(axis_left.scale(scale_y));\n }\n zoom.on('zoom', function(t, time) {\n t = t ||BrunelD3.restrictZoom(d3.event.transform, geom, this);\n scale_y = t.rescaleY(base_scales[1]);\n zoomNode.__zoom = t;\n interior.attr('class', 'interior ' + BrunelD3.zoomLabel(t.k));;\n build(time || -1);\n });\n\n // Define element #1 ///////////////////////////////////////////////////////////////////////////\n\n elements[0] = function() {\n var original, processed, // data sets passed in and then transformed\n element, data, // brunel element information and brunel data\n selection, merged; // d3 selection and merged selection\n var elementGroup = interior.append('g').attr('class', 'element1'),\n main = elementGroup.append('g').attr('class', 'main'),\n labels = BrunelD3.undoTransform(elementGroup.append('g').attr('class', 'labels').attr('aria-hidden', 'true'), elementGroup);\n\n function makeData() {\n original = datasets[0];\n if (filterRows) original = original.retainRows(filterRows);\n processed = pre(original, 0)\n .summarize('EstIncome=EstIncome:mean; CHURN=CHURN:base; LocalBilltype=LocalBilltype')\n .stack('EstIncome; CHURN; LocalBilltype; false');\n processed = post(processed, 0);\n var f0 = processed.field('EstIncome$lower'),\n f1 = processed.field('EstIncome$upper'),\n f2 = processed.field('CHURN'),\n f3 = processed.field('EstIncome'),\n f4 = processed.field('LocalBilltype'),\n f5 = processed.field('#row'),\n f6 = processed.field('#selection');\n var keyFunc = function(d) { return f2.value(d)+ '|' + f4.value(d) };\n data = {\n EstIncome$lower:function(d) { return f0.value(d.row) },\n EstIncome$upper:function(d) { return f1.value(d.row) },\n CHURN: function(d) { return f2.value(d.row) },\n EstIncome: function(d) { return f3.value(d.row) },\n LocalBilltype:function(d) { return f4.value(d.row) },\n $row: function(d) { return f5.value(d.row) },\n $selection: function(d) { return f6.value(d.row) },\n EstIncome$lower_f:function(d) { return f0.valueFormatted(d.row) },\n EstIncome$upper_f:function(d) { return f1.valueFormatted(d.row) },\n CHURN_f: function(d) { return f2.valueFormatted(d.row) },\n EstIncome_f: function(d) { return f3.valueFormatted(d.row) },\n LocalBilltype_f:function(d) { return f4.valueFormatted(d.row) },\n $row_f: function(d) { return f5.valueFormatted(d.row) },\n $selection_f: function(d) { return f6.valueFormatted(d.row) },\n _split: function(d) { return f4.value(d.row) },\n _key: keyFunc,\n _rows: BrunelD3.makeRowsWithKeys(keyFunc, processed.rowCount())\n };\n }\n // Aesthetic Functions\n var scale_color = d3.scaleOrdinal()\n .domain(['Budget', 'FreeLocal'])\n .range([ '#347DAD', '#D43F58', '#F7D84A', '#31A461', '#A66A9C', '#FF954D', \n '#A7978E', '#FFCA4D', '#F99EAF', '#B1C43B', '#7E64A2', '#FFB04D', '#CA5C7C', \n '#DDBC8C', '#FFA28D', '#A5473D', '#8B6141', '#F57357', '#5C6B46']);\n var color = function(d) { return scale_color(data.LocalBilltype(d)) };\n legends._legend = legends._legend || { title: ['Local Billtype'], \n ticks: scale_color.domain()};\n legends._legend.color = scale_color;\n\n // Build element from data ///////////////////////////////////////////////////////////////////\n\n function build(transitionMillis) {\n element = elements[0];\n var w = 0.9 * Math.abs(scale_x(scale_x.domain()[1]) - scale_x(scale_x.domain()[0]) );\n var x = function(d) { return scale_x(data.CHURN(d))};\n var h = Math.abs( scale_y(scale_y.domain()[0] + 11157.974178469827) - scale_y.range()[0] );\n var y1 = function(d) { return scale_y(data.EstIncome$lower(d))};\n var y2 = function(d) { return scale_y(data.EstIncome$upper(d))};\n var y = function(d) { return scale_y( (data.EstIncome$upper(d) + data.EstIncome$lower(d) )/2)};\n\n // Define selection entry operations\n function initialState(selection) {\n selection\n .attr('class', 'element bar filled')\n }\n\n // Define selection update operations on merged data\n function updateState(selection) {\n selection\n .each(function(d) {\n var width = w, left = x(d) - width/2, \n c = y1(d), d = y2(d), top = Math.min(c,d), height = Math.max(1e-6, Math.abs(c-d));\n this.r = {x:left, y:top, w:width, h:height};\n })\n .attr('x', function(d) { return this.r.x })\n .attr('y', function(d) { return this.r.y })\n .attr('width', function(d) { return this.r.w })\n .attr('height', function(d) { return this.r.h })\n .filter(BrunelD3.hasData) // following only performed for data items\n .style('fill', color);\n }\n\n // Define labeling for the selection\n function label(selection, transitionMillis) {\n\n var tooltipLabeling = {\n index: -1, method: 'box', location: ['center', 'top'], inside: true, align: 'middle', pad: 0, dy: 0.7,\n fit: true, granularity: 0,\n content: function(d) {\n return d.row == null ? null : '<span class=\"field\">' + data.EstIncome_f(d) + '</span>'\n }\n };\n BrunelD3.addTooltip(selection, tooltipLabeling, geom);\n }\n // Create selections, set the initial state and transition updates\n selection = main.selectAll('.element').data(data._rows, function(d) { return d.key });\n var added = selection.enter().append('rect');\n merged = selection.merge(added);\n initialState(added);\n selection.filter(BrunelD3.hasData)\n .classed('selected', BrunelD3.isSelected(data))\n .filter(BrunelD3.isSelected(data)).raise();\n updateState(BrunelD3.transition(merged, transitionMillis));\n label(merged, transitionMillis);\n\n BrunelD3.transition(selection.exit(), transitionMillis/3)\n .style('opacity', 0.5).each( function() {\n this.remove(); BrunelD3.removeLabels(this); \n });\n }\n\n return {\n data: function() { return processed },\n original: function() { return original },\n internal: function() { return data },\n selection: function() { return merged },\n makeData: makeData,\n build: build,\n chart: function() { return charts[0] },\n group: function() { return elementGroup },\n fields: {\n x: ['CHURN'],\n y: ['EstIncome'],\n key: ['CHURN', 'LocalBilltype'],\n color: ['LocalBilltype']\n }\n };\n }();\n\n function build(time, noData) {\n var first = elements[0].data() == null;\n if (first) time = 0; // no transition for first call\n buildAxes(time);\n if ((first || time > -1) && !noData) {\n elements[0].makeData();\n BrunelD3.addLegend(legends, legends._legend);\n }\n elements[0].build(time);\n }\n\n // Expose the following components of the chart\n return {\n elements : elements,\n interior : interior,\n scales: {x:scale_x, y:scale_y},\n zoom: function(params, time) {\n if (params) zoom.on('zoom').call(zoomNode, params, time);\n return d3.zoomTransform(zoomNode);\n },\n build : build\n };\n }();\n\n // Define chart #2 in the visualization //////////////////////////////////////////////////////////\n\n charts[1] = function(parentNode, filterRows) {\n var geom = BrunelD3.geometry(parentNode || vis.node(), 0, 0.5, 1, 1, 5, 43, 37, 69),\n elements = []; // array of elements in this chart\n\n // Define groups for the chart parts ///////////////////////////////////////////////////////////\n\n var chart = vis.append('g').attr('class', 'chart2')\n .attr('transform','translate(' + geom.chart_left + ',' + geom.chart_top + ')');\n var overlay = chart.append('g').attr('class', 'element').attr('class', 'overlay');\n var zoom = d3.zoom().scaleExtent([1/3,3]);\n var zoomNode = overlay.append('rect').attr('class', 'overlay')\n .attr('x', geom.inner_left).attr('y', geom.inner_top)\n .attr('width', geom.inner_rawWidth).attr('height', geom.inner_rawHeight)\n .style('cursor', 'move').call(zoom)\n .node();\n zoomNode.__zoom = d3.zoomIdentity;\n chart.append('rect').attr('class', 'background').attr('width', geom.chart_right-geom.chart_left).attr('height', geom.chart_bottom-geom.chart_top);\n var interior = chart.append('g').attr('class', 'interior zoomNone')\n .attr('transform','translate(' + geom.inner_left + ',' + geom.inner_top + ')')\n .attr('clip-path', 'url(#clip_visidfe341676-52cd-11e7-9ed8-002590fb6500_chart2_inner)');\n interior.append('rect').attr('class', 'inner').attr('width', geom.inner_width).attr('height', geom.inner_height);\n var gridGroup = interior.append('g').attr('class', 'grid');\n var axes = chart.append('g').attr('class', 'axis')\n .attr('transform','translate(' + geom.inner_left + ',' + geom.inner_top + ')');\n var legends = chart.append('g').attr('class', 'legend')\n .attr('transform','translate(' + (geom.chart_right-geom.chart_left - 3) + ',' + 0 + ')');\n vis.append('clipPath').attr('id', 'clip_visidfe341676-52cd-11e7-9ed8-002590fb6500_chart2_inner').append('rect')\n .attr('x', 0).attr('y', 0)\n .attr('width', geom.inner_rawWidth+1).attr('height', geom.inner_rawHeight+1);\n\n // Scales //////////////////////////////////////////////////////////////////////////////////////\n\n var scale_x = d3.scaleLinear().domain([-10, 70.000008])\n .range([0, geom.inner_width]);\n var scale_inner = d3.scaleLinear().domain([0,1])\n .range([-0.5, 0.5]);\n var scale_y = d3.scaleSqrt().domain([0, 400.00004])\n .range([geom.inner_height, 0]);\n var base_scales = [scale_x, scale_y]; // untransformed original scales\n\n // Axes ////////////////////////////////////////////////////////////////////////////////////////\n\n axes.append('g').attr('class', 'x axis')\n .attr('transform','translate(0,' + geom.inner_rawHeight + ')')\n .attr('clip-path', 'url(#clip_visidfe341676-52cd-11e7-9ed8-002590fb6500_chart2_haxis)');\n vis.append('clipPath').attr('id', 'clip_visidfe341676-52cd-11e7-9ed8-002590fb6500_chart2_haxis').append('polyline')\n .attr('points', '-1,-1000, -1,-1 -5,5, -1000,5, -100,1000, 10000,1000 10000,-1000');\n axes.select('g.axis.x').append('text').attr('class', 'title').text('Long Distance').style('text-anchor', 'middle')\n .attr('x',geom.inner_rawWidth/2)\n .attr('y', geom.inner_bottom - 2.0).attr('dy','-0.27em');\n axes.append('g').attr('class', 'y axis')\n .attr('clip-path', 'url(#clip_visidfe341676-52cd-11e7-9ed8-002590fb6500_chart2_vaxis)');\n vis.append('clipPath').attr('id', 'clip_visidfe341676-52cd-11e7-9ed8-002590fb6500_chart2_vaxis').append('polyline')\n .attr('points', '-1000,-10000, 10000,-10000, 10000,' + (geom.inner_rawHeight+1) + ', -1,' + (geom.inner_rawHeight+1) + ', -1,' + (geom.inner_rawHeight+5) + ', -1000,' + (geom.inner_rawHeight+5) );\n axes.select('g.axis.y').append('text').attr('class', 'title').text('Usage').style('text-anchor', 'middle')\n .attr('x',-geom.inner_rawHeight/2)\n .attr('y', 4-geom.inner_left).attr('dy', '0.7em').attr('transform', 'rotate(270)');\n\n var axis_bottom = d3.axisBottom(scale_x).ticks(Math.min(10, Math.round(geom.inner_width / 33.0)));\n var axis_left = d3.axisLeft(scale_y).ticks(Math.min(10, Math.round(geom.inner_width / 20)));\n\n function buildAxes(time) {\n var axis_x = axes.select('g.axis.x');\n BrunelD3.transition(axis_x, time).call(axis_bottom.scale(scale_x));\n var axis_y = axes.select('g.axis.y');\n BrunelD3.transition(axis_y, time).call(axis_left.scale(scale_y));\n }\n zoom.on('zoom', function(t, time) {\n t = t ||BrunelD3.restrictZoom(d3.event.transform, geom, this);\n scale_x = t.rescaleX(base_scales[0]);\n scale_y = t.rescaleY(base_scales[1]);\n zoomNode.__zoom = t;\n interior.attr('class', 'interior ' + BrunelD3.zoomLabel(t.k));;\n build(time || -1);\n });\n\n // Define element #1 ///////////////////////////////////////////////////////////////////////////\n\n elements[0] = function() {\n var original, processed, // data sets passed in and then transformed\n element, data, // brunel element information and brunel data\n selection, merged; // d3 selection and merged selection\n var elementGroup = interior.append('g').attr('class', 'element1'),\n main = elementGroup.append('g').attr('class', 'main'),\n labels = BrunelD3.undoTransform(elementGroup.append('g').attr('class', 'labels').attr('aria-hidden', 'true'), elementGroup);\n\n function makeData() {\n original = datasets[0];\n if (filterRows) original = original.retainRows(filterRows);\n processed = pre(original, 0);\n processed = post(processed, 0);\n var f0 = processed.field('LongDistance'),\n f1 = processed.field('Usage'),\n f2 = processed.field('Paymethod'),\n f3 = processed.field('#row'),\n f4 = processed.field('#selection');\n var keyFunc = function(d) { return f3.value(d) };\n data = {\n LongDistance: function(d) { return f0.value(d.row) },\n Usage: function(d) { return f1.value(d.row) },\n Paymethod: function(d) { return f2.value(d.row) },\n $row: function(d) { return f3.value(d.row) },\n $selection: function(d) { return f4.value(d.row) },\n LongDistance_f:function(d) { return f0.valueFormatted(d.row) },\n Usage_f: function(d) { return f1.valueFormatted(d.row) },\n Paymethod_f: function(d) { return f2.valueFormatted(d.row) },\n $row_f: function(d) { return f3.valueFormatted(d.row) },\n $selection_f: function(d) { return f4.valueFormatted(d.row) },\n _split: function(d) { return f2.value(d.row) },\n _key: keyFunc,\n _rows: BrunelD3.makeRowsWithKeys(keyFunc, processed.rowCount())\n };\n }\n // Aesthetic Functions\n var scale_color = d3.scaleOrdinal()\n .domain(['Auto', 'CC', 'CH'])\n .range([ '#00538A', '#C10020', '#F4C800', '#007D34', '#803E75', '#FF6800', \n '#817066', '#FFB300', '#F6768E', '#93AA00', '#53377A', '#FF8E00', '#B32851', \n '#CEA262', '#FF7A5C', '#7F180D', '#593315', '#F13A13', '#232C16']);\n var color = function(d) { return scale_color(data.Paymethod(d)) };\n legends._legend = legends._legend || { title: ['Paymethod'], \n ticks: scale_color.domain()};\n legends._legend.color = scale_color;\n\n // Build element from data ///////////////////////////////////////////////////////////////////\n\n function build(transitionMillis) {\n element = elements[0];\n var w = geom.default_point_size;\n var x = function(d) { return scale_x(data.LongDistance(d))};\n var h = geom.default_point_size;\n var y = function(d) { return scale_y(data.Usage(d))};\n\n // Define selection entry operations\n function initialState(selection) {\n selection\n .attr('class', 'element point filled')\n }\n\n // Define selection update operations on merged data\n function updateState(selection) {\n selection\n .attr('cx',function(d) { return scale_x(data.LongDistance(d))})\n .attr('cy',function(d) { return scale_y(data.Usage(d))})\n .attr('r',geom.default_point_size / 2)\n .filter(BrunelD3.hasData) // following only performed for data items\n .style('fill', color);\n }\n\n // Define labeling for the selection\n function label(selection, transitionMillis) {\n\n var tooltipLabeling = {\n index: -1, method: 'box', location: ['center', 'top'], inside: true, align: 'middle', pad: 0, dy: 0.7,\n fit: true, granularity: 0,\n content: function(d) {\n return d.row == null ? null : '<span class=\"title\">Long Distance: </span>'\n\t\t\t+ '<span class=\"field\">' + data.LongDistance_f(d) + '</span>'\n\t\t\t+ '<br/>'\n\t\t\t+ '<span class=\"title\">Usage: </span>'\n\t\t\t+ '<span class=\"field\">' + data.Usage_f(d) + '</span>'\n }\n };\n BrunelD3.addTooltip(selection, tooltipLabeling, geom);\n }\n // Create selections, set the initial state and transition updates\n selection = main.selectAll('.element').data(data._rows, function(d) { return d.key });\n var added = selection.enter().append('circle');\n merged = selection.merge(added);\n initialState(added);\n selection.filter(BrunelD3.hasData)\n .classed('selected', BrunelD3.isSelected(data))\n .filter(BrunelD3.isSelected(data)).raise();\n updateState(BrunelD3.transition(merged, transitionMillis));\n label(merged, transitionMillis);\n\n BrunelD3.transition(selection.exit(), transitionMillis/3)\n .style('opacity', 0.5).each( function() {\n this.remove(); BrunelD3.removeLabels(this); \n });\n }\n\n return {\n data: function() { return processed },\n original: function() { return original },\n internal: function() { return data },\n selection: function() { return merged },\n makeData: makeData,\n build: build,\n chart: function() { return charts[1] },\n group: function() { return elementGroup },\n fields: {\n x: ['LongDistance'],\n y: ['Usage'],\n key: ['#row'],\n color: ['Paymethod']\n }\n };\n }();\n\n function build(time, noData) {\n var first = elements[0].data() == null;\n if (first) time = 0; // no transition for first call\n buildAxes(time);\n if ((first || time > -1) && !noData) {\n elements[0].makeData();\n BrunelD3.addLegend(legends, legends._legend);\n }\n elements[0].build(time);\n }\n\n // Expose the following components of the chart\n return {\n elements : elements,\n interior : interior,\n scales: {x:scale_x, y:scale_y},\n zoom: function(params, time) {\n if (params) zoom.on('zoom').call(zoomNode, params, time);\n return d3.zoomTransform(zoomNode);\n },\n build : build\n };\n }();\n\n function setData(rowData, i) { datasets[i||0] = BrunelD3.makeData(rowData) }\n function updateAll(time) { charts.forEach(function(x) {x.build(time || 0)}) }\n function buildAll() {\n for (var i=0;i<arguments.length;i++) setData(arguments[i], i);\n updateAll(transitionTime);\n }\n\n return {\n dataPreProcess: function(f) { if (f) pre = f; return pre },\n dataPostProcess: function(f) { if (f) post = f; return post },\n data: function(d,i) { if (d) setData(d,i); return datasets[i||0] },\n visId: visId,\n build: buildAll,\n rebuild: updateAll,\n charts: charts\n }\n}\n\n// Data Tables /////////////////////////////////////////////////////////////////////////////////////\n\nvar table1 = {\n summarized: false,\n names: ['CHURN', 'EstIncome', 'LocalBilltype', 'LongDistance', 'Usage', 'Paymethod'], \n options: ['string', 'numeric', 'string', 'numeric', 'numeric', 'string'], \n rows: [['T', 38000, 'Budget', 23.56, 229.64, 'CC'], ['F', 29616, 'FreeLocal', 29.78, 75.29, 'CH'],\n ['F', 19732.8, 'FreeLocal', 24.81, 47.25, 'CC'], ['F', 96.33, 'Budget', 26.13, 59.01, 'CC'],\n ['F', 52004.8, 'Budget', 5.03, 28.14, 'CH'], ['F', 53010.8, 'FreeLocal', 12.45, 58.87, 'CC'],\n ['F', 75004.5, 'Budget', 26.52, 58.72, 'CC'], ['F', 19749.3, 'Budget', 20.22, 34.17, 'CC'],\n ['F', 57626.9, 'Budget', 9.38, 48.35, 'CC'], ['F', 20078, 'Budget', 9.65, 15.98, 'CC'],\n ['F', 47902, 'FreeLocal', 17.44, 72.31, 'Auto'], ['T', 7545.96, 'Budget', 22.39, 200.75, 'CC'],\n ['T', 78851.3, 'FreeLocal', 0.37, 29.04, 'CC'], ['T', 17540.7, 'Budget', 22.17, 36.2, 'Auto'],\n ['T', 83891.9, 'Budget', 28.92, 74.4, 'CH'], ['T', 28220.8, 'FreeLocal', 26.49, 38.95, 'CC'],\n ['T', 28589.1, 'FreeLocal', 13.19, 100.28, 'CC'], ['F', 5237.63, 'Budget', 13.32, 78.02, 'CC'],\n ['T', 89459.9, 'FreeLocal', 11.54, 36.05, 'CC'], ['T', 13576.5, 'Budget', 14.83, 40.49, 'CC'],\n ['T', 67388, 'Budget', 4.79, 96.33, 'CC'], ['F', 57063, 'Budget', 16.79, 98.1, 'CH'],\n ['T', 84166.1, 'Budget', 3.28, 15.02, 'CC'], ['T', 7737.94, 'FreeLocal', 11.05, 61.9, 'CC'],\n ['T', 100020, 'Budget', 21.37, 314.62, 'CH'], ['F', 45287.6, 'Budget', 0, 2.97, 'CC'],\n ['T', 59613.1, 'Budget', 12.37, 175.78, 'CC'], ['T', 16326.7, 'FreeLocal', 0, 1.34, 'CC'],\n ['T', 9559.78, 'FreeLocal', 18.31, 77.91, 'CC'], ['F', 42031.8, 'Budget', 20.45, 59.78, 'CH'],\n ['F', 83284.1, 'FreeLocal', 26.91, 35.96, 'Auto'], ['F', 39229.1, 'Budget', 28.82, 47.1, 'CC'],\n ['F', 68427.4, 'FreeLocal', 23.76, 73.81, 'Auto'], ['T', 3601.71, 'Budget', 9.57, 125.6, 'Auto'],\n ['F', 72642.6, 'FreeLocal', 18.66, 39, 'CH'], ['T', 98716.3, 'FreeLocal', 20.97, 43.13, 'CC'],\n ['F', 66182.7, 'Budget', 11.7, 58.87, 'Auto'], ['T', 84789.3, 'FreeLocal', 14.22, 33.47, 'CH'],\n ['T', 35976.5, 'FreeLocal', 18.85, 50.63, 'Auto'], ['F', 32703.1, 'Budget', 16.8, 72.89, 'CC'],\n ['F', 77129.1, 'FreeLocal', 24.77, 44.85, 'CH'], ['F', 8204.72, 'FreeLocal', 15.59, 39.79, 'CH'],\n ['T', 97180.4, 'FreeLocal', 8.21, 63.51, 'CC'], ['F', 80405.1, 'FreeLocal', 2.91, 28.98, 'CC'],\n ['T', 38280, 'FreeLocal', 11.64, 86.61, 'Auto'], ['T', 64136.6, 'FreeLocal', 16.21, 142.37, 'CC'],\n ['T', 45429.7, 'FreeLocal', 24.7, 97.74, 'CH'], ['T', 25285.5, 'FreeLocal', 9.37, 21.3, 'CC'],\n ['F', 77551.1, 'Budget', 20.53, 62.42, 'CC'], ['T', 38538.4, 'FreeLocal', 22.86, 47.66, 'CC'],\n ['F', 69350.5, 'FreeLocal', 1.9, 27.86, 'CC'], ['T', 43634.5, 'Budget', 29.44, 143.5, 'CC'],\n ['T', 13109.1, 'Budget', 22.38, 62.87, 'Auto'], ['T', 92647.5, 'Budget', 16.04, 32.13, 'CC'],\n ['T', 21021.6, 'Budget', 1, 14.95, 'CC'], ['T', 74460.7, 'FreeLocal', 25.53, 206.46, 'CC'],\n ['T', 28787.4, 'Budget', 27.97, 86.06, 'Auto'], ['F', 13091.6, 'Budget', 22.79, 43.06, 'CC'],\n ['F', 62061.8, 'FreeLocal', 29.86, 82.08, 'Auto'], ['T', 20550.9, 'Budget', 27.72, 85.64, 'CC'],\n ['F', 1765.41, 'FreeLocal', 3.04, 47.99, 'CC'], ['T', 19131.1, 'Budget', 22.15, 57.07, 'Auto'],\n ['F', 83073.7, 'Budget', 0, 3.2, 'CC'], ['F', 42750.3, 'Budget', 20.59, 134.97, 'Auto'],\n ['T', 2842.55, 'Budget', 0, 0.79, 'Auto'], ['F', 22358.1, 'Budget', 15.54, 29.25, 'CC'],\n ['F', 47870.8, 'FreeLocal', 2, 13.82, 'CC'], ['F', 6440.46, 'Budget', 22.66, 49.86, 'CH'],\n ['T', 7325.5, 'FreeLocal', 28.52, 190.06, 'CC'], ['F', 28766.9, 'Budget', 6.11, 64.2, 'CC'],\n ['F', 91272.2, 'FreeLocal', 26.99, 40, 'CC'], ['T', 65000, 'FreeLocal', 11.63, 137, 'Auto'],\n ['F', 1406.05, 'Budget', 11.55, 26.72, 'CC'], ['F', 73228.3, 'Budget', 22.47, 50.58, 'Auto'],\n ['F', 76231.9, 'FreeLocal', 2.01, 152.76, 'Auto'], ['T', 64792.3, 'FreeLocal', 13.05, 51.41, 'CH'],\n ['T', 93322.1, 'Budget', 29.92, 38.72, 'CH'], ['T', 63437.3, 'Budget', 0.68, 14.98, 'CC'],\n ['F', 49910.7, 'Budget', 27.42, 51.14, 'CC'], ['T', 76161.4, 'FreeLocal', 11.96, 37.55, 'CC'],\n ['F', 55860, 'FreeLocal', 16.01, 26.37, 'CC'], ['T', 12686, 'Budget', 23.23, 103.88, 'Auto'],\n ['F', 57360.8, 'FreeLocal', 10.36, 67.61, 'CC'], ['T', 92414.7, 'FreeLocal', 29.43, 40.06, 'CC'],\n ['T', 60102.7, 'FreeLocal', 9.84, 72.29, 'CH'], ['F', 17888.7, 'Budget', 29.41, 361.88, 'CC'],\n ['T', 12526.3, 'FreeLocal', 11.72, 40.59, 'CC'], ['T', 14578.8, 'Budget', 11.91, 107.02, 'Auto'],\n ['T', 78572.2, 'FreeLocal', 21.81, 51.09, 'CC'], ['F', 48238.8, 'FreeLocal', 23.28, 191.32, 'CC'],\n ['F', 28770.9, 'FreeLocal', 27.99, 49.6, 'CH'], ['F', 87578.2, 'Budget', 0.29, 22.44, 'CC'],\n ['F', 86695.4, 'FreeLocal', 25.94, 58.03, 'CC'], ['F', 76791.2, 'Budget', 20.71, 43.71, 'CC'],\n ['T', 30763.8, 'Budget', 21.32, 57.17, 'CC'], ['F', 3193.6, 'Budget', 4.19, 118.82, 'CH'],\n ['F', 69680.9, 'FreeLocal', 7.67, 39.8, 'CC'], ['F', 83287, 'FreeLocal', 29.64, 119.82, 'Auto'],\n ['T', 2056.06, 'Budget', 24.07, 58.8, 'Auto'], ['F', 7776.6, 'FreeLocal', 25.87, 94.2, 'CC'],\n ['F', 2067.82, 'Budget', 15.25, 85.9, 'CC'], ['T', 66666, 'Budget', 4.58, 20.74, 'CH'],\n ['F', 69343.3, 'FreeLocal', 6.36, 21.91, 'CC'], ['F', 77000, 'Budget', 0.57, 24.46, 'Auto'],\n ['F', 14932.5, 'Budget', 4.91, 11.42, 'CC'], ['F', 27498.1, 'Budget', 2.2, 12.08, 'CC'],\n ['F', 21419.9, 'FreeLocal', 26.39, 129.51, 'CC'], ['F', 30665.2, 'FreeLocal', 5.83, 77.44, 'Auto'],\n ['F', 66000, 'FreeLocal', 6.08, 37.04, 'Auto'], ['F', 50561.3, 'Budget', 16.6, 129.91, 'CH'],\n ['T', 23464, 'Budget', 22.43, 64.14, 'CC'], ['F', 194.57, 'FreeLocal', 28.26, 67.21, 'CC'],\n ['F', 98680.4, 'FreeLocal', 17.58, 26.44, 'CH'], ['T', 65619.7, 'Budget', 13.56, 158.22, 'CC'],\n ['F', 95620.3, 'Budget', 10.91, 104.53, 'CC'], ['F', 85275, 'FreeLocal', 22.48, 174.09, 'Auto'],\n ['F', 66921.4, 'FreeLocal', 15.7, 24.67, 'CC'], ['F', 98453.6, 'FreeLocal', 13.72, 25.38, 'Auto'],\n ['F', 94026.8, 'FreeLocal', 25, 35.63, 'CC'], ['F', 57420, 'Budget', 25.18, 277.72, 'Auto'],\n ['T', 77000, 'FreeLocal', 3.93, 34.35, 'CH'], ['F', 47639.1, 'Budget', 17.48, 57.11, 'CC'],\n ['F', 63234.5, 'FreeLocal', 0, 1.16, 'CH'], ['F', 18296.4, 'FreeLocal', 0.08, 10.47, 'CC'],\n ['T', 39461, 'FreeLocal', 22.87, 126.68, 'CC'], ['F', 68000, 'FreeLocal', 22.82, 86.12, 'Auto'],\n ['F', 52957, 'FreeLocal', 25.79, 151.32, 'CH'], ['F', 86747.1, 'Budget', 20.15, 57.4, 'Auto'],\n ['F', 87404.6, 'Budget', 21.63, 160.84, 'Auto'], ['F', 20919, 'FreeLocal', 6.26, 164.54, 'CC'],\n ['F', 85394, 'Budget', 19.28, 35.69, 'Auto'], ['T', 2121.36, 'FreeLocal', 2.02, 38.8, 'CC'],\n ['F', 63566.1, 'Budget', 7.94, 73.03, 'CH'], ['F', 89813.6, 'FreeLocal', 14.94, 166.18, 'CC'],\n ['F', 82644.2, 'FreeLocal', 21.97, 41.85, 'CC'], ['T', 27783.6, 'FreeLocal', 4.97, 29.58, 'CC'],\n ['F', 60485.5, 'Budget', 11.7, 40.41, 'Auto'], ['F', 809.43, 'FreeLocal', 0, 2.89, 'CH'],\n ['T', 76529.8, 'Budget', 18.46, 43.89, 'CC'], ['F', 34577.7, 'Budget', 29.18, 145.75, 'CH'],\n ['F', 80000, 'Budget', 27.56, 73.02, 'Auto'], ['T', 19008.4, 'FreeLocal', 10.54, 147.74, 'CC'],\n ['F', 98056.3, 'FreeLocal', 23.7, 150.67, 'Auto'], ['T', 73400, 'Budget', 0, 2.21, 'CH'],\n ['F', 78894.2, 'Budget', 2, 46.65, 'CH'], ['T', 16432.1, 'Budget', 20.41, 109.78, 'CH'],\n ['T', 62797.9, 'Budget', 8.32, 68.09, 'CH'], ['T', 71329.9, 'Budget', 14.27, 63.75, 'CC'],\n ['T', 20913.6, 'FreeLocal', 22.99, 95.93, 'CC'], ['T', 540.4, 'Budget', 12.34, 20.1, 'Auto'],\n ['F', 67339.8, 'FreeLocal', 27.83, 81.72, 'CC'], ['T', 75799.9, 'FreeLocal', 22.24, 94.06, 'CC'],\n ['T', 15688.5, 'Budget', 14.39, 22.42, 'CC'], ['T', 43382.3, 'FreeLocal', 29.67, 138.37, 'CH'],\n ['T', 5185.31, 'FreeLocal', 16.39, 52.9, 'CC'], ['T', 41000, 'Budget', 26.01, 134.45, 'CC'],\n ['T', 32098, 'Budget', 22.96, 106.53, 'CH'], ['F', 80087.7, 'FreeLocal', 8.74, 31.56, 'CC'],\n ['F', 59691.3, 'Budget', 21.94, 278.65, 'CC'], ['T', 11251.1, 'FreeLocal', 28.42, 141.91, 'CC'],\n ['T', 70908.7, 'FreeLocal', 7.7, 55.47, 'CC'], ['T', 94928.3, 'FreeLocal', 14.42, 93.78, 'CH'],\n ['F', 50622.3, 'FreeLocal', 20.45, 112.72, 'Auto'], ['T', 78000, 'FreeLocal', 16.2, 39.32, 'CC'],\n ['T', 100020, 'Budget', 29.55, 92.37, 'CH'], ['F', 56722.8, 'FreeLocal', 17.37, 74.77, 'CC'],\n ['T', 80000, 'Budget', 0, 3.22, 'CC'], ['T', 3416.62, 'Budget', 18.97, 123.7, 'CC'],\n ['F', 73400, 'Budget', 0.17, 10.39, 'Auto'], ['T', 120000, 'FreeLocal', 15.27, 40.9, 'CC'],\n ['F', 8032.16, 'FreeLocal', 29.68, 88.77, 'CC'], ['F', 93454.3, 'FreeLocal', 18.94, 44.13, 'Auto'],\n ['T', 5745, 'FreeLocal', 26.4, 44.11, 'CC'], ['F', 83287, 'Budget', 0.41, 215.96, 'Auto'],\n ['F', 92564.1, 'FreeLocal', 23.17, 74.86, 'Auto'], ['F', 86448.2, 'Budget', 4.91, 90.25, 'CC'],\n ['F', 48322.5, 'FreeLocal', 6.69, 50.29, 'CC'], ['F', 81913.8, 'FreeLocal', 6.7, 53.03, 'CC'],\n ['T', 919.93, 'Budget', 27.28, 120.71, 'CH'], ['F', 69486.8, 'Budget', 7.72, 17.11, 'CC'],\n ['F', 24482.8, 'Budget', 0, 2, 'CH'], ['F', 14573.6, 'Budget', 26.61, 263.58, 'CC'],\n ['F', 92103.8, 'Budget', 7.42, 14.86, 'CC'], ['T', 8392.14, 'Budget', 25.03, 87.16, 'CH'],\n ['T', 17138.2, 'FreeLocal', 20.01, 104.69, 'CC'], ['F', 47010.1, 'Budget', 2.54, 167.31, 'CC'],\n ['F', 67239.4, 'FreeLocal', 12.89, 66.7, 'Auto'], ['F', 69406.7, 'FreeLocal', 6.9, 142.23, 'CC'],\n ['F', 83259.3, 'Budget', 0, 4.46, 'CC'], ['F', 60095.2, 'Budget', 1.71, 117.85, 'Auto'],\n ['F', 2185.6, 'Budget', 7.12, 28.07, 'CH'], ['T', 76511.3, 'FreeLocal', 21.68, 42.52, 'CC'],\n ['T', 6946.07, 'FreeLocal', 25.77, 34.61, 'CH'], ['F', 11234.7, 'Budget', 0.69, 113.42, 'CC'],\n ['F', 36660.9, 'Budget', 0, 3.36, 'CH'], ['F', 68462.8, 'FreeLocal', 24.39, 90.84, 'CC'],\n ['F', 72841.3, 'Budget', 10.36, 82.53, 'CC'], ['F', 63670.8, 'FreeLocal', 27.39, 78.87, 'Auto'],\n ['T', 83287, 'Budget', 29.73, 70.7, 'CC'], ['F', 66000, 'Budget', 20.44, 120.53, 'Auto'],\n ['F', 12387.6, 'FreeLocal', 7, 93.85, 'Auto'], ['F', 82931.3, 'FreeLocal', 19.24, 137.25, 'Auto'],\n ['F', 57483.9, 'Budget', 17.01, 44.3, 'CH'], ['T', 21274, 'FreeLocal', 10.87, 43.31, 'Auto'],\n ['F', 28267, 'FreeLocal', 21.87, 214.41, 'CC'], ['F', 36725.1, 'Budget', 8.65, 94.88, 'CH'],\n ['T', 94188.3, 'Budget', 20.86, 41.51, 'CC'], ['F', 91861, 'Budget', 15.32, 22.06, 'CC'],\n ['T', 12374.9, 'FreeLocal', 17.49, 123.59, 'Auto'], ['F', 69133.9, 'FreeLocal', 8.58, 46.32, 'CH'],\n ['F', 84948, 'FreeLocal', 11.14, 23.73, 'CH'], ['F', 30998.8, 'Budget', 2.4, 52.91, 'Auto'],\n ['F', 15924.2, 'FreeLocal', 0, 1.46, 'CH'], ['F', 21416.5, 'FreeLocal', 9.9, 27.61, 'CC'],\n ['F', 78554.2, 'Budget', 5.59, 35.88, 'Auto'], ['T', 3960.5, 'FreeLocal', 29.78, 96.13, 'Auto'],\n ['T', 60101.1, 'FreeLocal', 27.7, 157.96, 'CH'], ['F', 38215.9, 'Budget', 0, 0.97, 'Auto'],\n ['T', 13829.4, 'FreeLocal', 28, 176.61, 'CC'], ['F', 49745.3, 'Budget', 2.84, 27.28, 'CH'],\n ['F', 88427, 'Budget', 22.46, 69.97, 'CC'], ['F', 98003.7, 'FreeLocal', 1.03, 84.42, 'CC'],\n ['F', 89142.7, 'Budget', 3.76, 16.91, 'CC'], ['F', 74530.8, 'FreeLocal', 20.89, 127.89, 'Auto'],\n ['T', 35000, 'Budget', 30, 265.78, 'CC'], ['F', 76289.2, 'Budget', 22.2, 104.63, 'CC'],\n ['T', 66931.9, 'Budget', 11.72, 17.46, 'CC'], ['T', 9309.57, 'FreeLocal', 40, 108.3, 'CC'],\n ['T', 14085.5, 'FreeLocal', 26, 48.08, 'Auto'], ['T', 32962.6, 'Budget', 27, 168.28, 'CC'],\n ['T', 40000, 'Budget', 26, 65.79, 'CC'], ['T', 33330, 'Budget', 33, 41.78, 'Auto'],\n ['T', 32098, 'Budget', 33, 23.52, 'Auto'], ['T', 30090, 'FreeLocal', 37, 62.95, 'CC'],\n ['T', 40120, 'Budget', 28.45, 134.75, 'CC'], ['F', 90271.6, 'FreeLocal', 13.96, 110.4, 'CC'],\n ['F', 64816.6, 'Budget', 21, 27.87, 'CC'], ['F', 98217.1, 'FreeLocal', 29.49, 42.74, 'CC'],\n ['T', 2929.13, 'Budget', 14, 102.23, 'CH'], ['F', 41876.6, 'FreeLocal', 6.78, 139.44, 'CC'],\n ['T', 96223.4, 'FreeLocal', 11.81, 18.18, 'CC'], ['T', 15989.3, 'Budget', 3.67, 29.17, 'CC'],\n ['T', 69168.4, 'Budget', 14.16, 234.91, 'CC'], ['F', 92148.5, 'Budget', 3, 113.68, 'CC'],\n ['F', 96681, 'Budget', 7, 73.76, 'CC'], ['F', 62705.9, 'FreeLocal', 8, 33.44, 'CC'],\n ['F', 80221.2, 'FreeLocal', 9, 50.48, 'Auto'], ['F', 84479.2, 'FreeLocal', 7, 56.23, 'CC'],\n ['F', 64977.4, 'FreeLocal', 28.11, 45.77, 'CC'], ['T', 77994, 'FreeLocal', 12.4, 102.02, 'CH'],\n ['F', 90103.7, 'Budget', 12.23, 66.45, 'CC'], ['T', 59008.4, 'Budget', 12.86, 31.59, 'CC'],\n ['F', 5265.35, 'Budget', 2.33, 31.1, 'Auto'], ['T', 84978.1, 'FreeLocal', 5.03, 88.79, 'CH'],\n ['F', 36647.9, 'Budget', 21.41, 107.38, 'CC'], ['T', 64319.2, 'Budget', 3.01, 40.16, 'CH'],\n ['F', 73338, 'Budget', 20.92, 29.93, 'Auto'], ['T', 433.74, 'FreeLocal', 3.3, 44.22, 'CC'],\n ['F', 16962.2, 'Budget', 18.6, 27.57, 'CC'], ['F', 10708.3, 'Budget', 20.83, 142.95, 'CH'],\n ['T', 2031.61, 'Budget', 21.64, 109.04, 'CC'], ['F', 16938.5, 'FreeLocal', 13.35, 22.11, 'CH'],\n ['F', 55221, 'FreeLocal', 0.49, 15.69, 'CC'], ['F', 8073.11, 'FreeLocal', 28.7, 89.05, 'Auto'],\n ['F', 95448.6, 'Budget', 24.24, 29.46, 'CH'], ['T', 24141.5, 'FreeLocal', 28.82, 125.87, 'CC'],\n ['F', 63152.6, 'Budget', 29.93, 70.01, 'CC'], ['F', 72084.7, 'Budget', 29.11, 38.13, 'CC'],\n ['F', 42760.5, 'Budget', 13.47, 53.7, 'CC'], ['F', 49072, 'Budget', 23.5, 34.25, 'Auto'],\n ['F', 27371.8, 'FreeLocal', 16.14, 142.7, 'CC'], ['T', 71472.9, 'Budget', 16.02, 130.22, 'CH'],\n ['F', 95405.7, 'Budget', 7.74, 13.96, 'CC'], ['F', 95786.8, 'Budget', 21.33, 108.79, 'CC'],\n ['F', 90321.6, 'FreeLocal', 0.87, 12.39, 'Auto'], ['T', 90478.6, 'FreeLocal', 18.02, 154.49, 'CC'],\n ['F', 56187, 'Budget', 8.09, 21.83, 'CH'], ['T', 37000, 'Budget', 23.56, 229.64, 'CC'],\n ['F', 29616, 'FreeLocal', 29.78, 75.29, 'CH'], ['F', 19732.8, 'FreeLocal', 24.81, 47.25, 'CC'],\n ['F', 96.33, 'Budget', 26.13, 59.01, 'CC'], ['F', 52004.8, 'Budget', 5.03, 28.14, 'CH'],\n ['F', 53010.8, 'FreeLocal', 12.45, 58.87, 'CC'], ['F', 75004.5, 'Budget', 26.52, 58.72, 'CC'],\n ['F', 19749.3, 'Budget', 20.22, 34.17, 'CC'], ['F', 57626.9, 'Budget', 9.38, 48.35, 'CC'],\n ['F', 20078, 'Budget', 9.65, 15.98, 'CC'], ['F', 47902, 'FreeLocal', 17.44, 72.31, 'Auto'],\n ['T', 7545.96, 'Budget', 22.39, 200.75, 'CC'], ['T', 78851.3, 'FreeLocal', 0.37, 29.04, 'CC'],\n ['T', 17540.7, 'Budget', 22.17, 36.2, 'Auto'], ['T', 83891.9, 'Budget', 28.92, 74.4, 'CH'],\n ['T', 28220.8, 'FreeLocal', 26.49, 38.95, 'CC'], ['T', 28589.1, 'FreeLocal', 13.19, 100.28, 'CC'],\n ['F', 5237.63, 'Budget', 13.32, 78.02, 'CC'], ['T', 89459.9, 'FreeLocal', 11.54, 36.05, 'CC'],\n ['T', 13576.5, 'Budget', 14.83, 40.49, 'CC'], ['F', 81710.9, 'FreeLocal', 20.95, 36.42, 'CC'],\n ['T', 67388, 'Budget', 4.79, 96.33, 'CC'], ['F', 57063, 'Budget', 16.79, 98.1, 'CH'],\n ['T', 84166.1, 'Budget', 3.28, 15.02, 'CC'], ['T', 7737.94, 'FreeLocal', 11.05, 61.9, 'CC'],\n ['T', 100020, 'Budget', 21.37, 314.62, 'CH'], ['F', 45287.6, 'Budget', 0, 2.97, 'CC'],\n ['T', 59613.1, 'Budget', 12.37, 175.78, 'CC'], ['T', 16326.7, 'FreeLocal', 0, 1.34, 'CC'],\n ['T', 9559.78, 'FreeLocal', 18.31, 77.91, 'CC'], ['F', 42031.8, 'Budget', 20.45, 59.78, 'CH'],\n ['F', 83284.1, 'FreeLocal', 26.91, 35.96, 'Auto'], ['F', 39229.1, 'Budget', 28.82, 47.1, 'CC'],\n ['F', 68427.4, 'FreeLocal', 23.76, 73.81, 'Auto'], ['F', 3601.71, 'Budget', 9.57, 125.6, 'Auto'],\n ['T', 98716.3, 'FreeLocal', 20.97, 43.13, 'CC'], ['F', 66182.7, 'Budget', 11.7, 58.87, 'Auto'],\n ['T', 84789.3, 'FreeLocal', 14.22, 33.47, 'CH'], ['T', 35976.5, 'FreeLocal', 18.85, 50.63, 'Auto'],\n ['F', 32703.1, 'Budget', 16.8, 72.89, 'CC'], ['F', 8204.72, 'FreeLocal', 15.59, 39.79, 'CH'],\n ['T', 97180.4, 'FreeLocal', 8.21, 63.51, 'CH'], ['T', 38280, 'FreeLocal', 11.64, 86.61, 'Auto'],\n ['T', 64136.6, 'FreeLocal', 16.21, 142.37, 'CC'], ['T', 45429.7, 'FreeLocal', 24.7, 97.74, 'CH'],\n ['T', 25285.5, 'FreeLocal', 9.37, 21.3, 'CC'], ['F', 77551.1, 'Budget', 20.53, 62.42, 'CC'],\n ['T', 38538.4, 'FreeLocal', 22.86, 47.66, 'CC'], ['F', 69350.5, 'FreeLocal', 1.9, 27.86, 'CC'],\n ['T', 43634.5, 'Budget', 29.44, 143.5, 'CC'], ['T', 13109.1, 'Budget', 22.38, 62.87, 'Auto'],\n ['T', 92647.5, 'Budget', 16.04, 32.13, 'CC'], ['F', 21021.6, 'Budget', 3.75, 14.95, 'CC'],\n ['T', 74460.7, 'FreeLocal', 25.53, 206.46, 'CC'], ['T', 28787.4, 'Budget', 27.97, 86.06, 'Auto'],\n ['F', 13091.6, 'Budget', 22.79, 43.06, 'CC'], ['F', 62061.8, 'FreeLocal', 29.86, 82.08, 'Auto'],\n ['T', 20550.9, 'Budget', 27.72, 85.64, 'CC'], ['F', 1765.41, 'FreeLocal', 3.04, 47.99, 'CC'],\n ['T', 19131.1, 'Budget', 22.15, 57.07, 'Auto'], ['F', 42750.3, 'Budget', 20.59, 134.97, 'Auto'],\n ['T', 2842.55, 'Budget', 0, 0.79, 'Auto'], ['F', 22358.1, 'Budget', 15.54, 29.25, 'CC'],\n ['F', 47870.8, 'FreeLocal', 2, 13.82, 'CC'], ['F', 6440.46, 'Budget', 22.66, 49.86, 'CH'],\n ['T', 7325.5, 'FreeLocal', 28.52, 190.06, 'CC'], ['F', 28766.9, 'Budget', 6.11, 64.2, 'CC'],\n ['F', 5252.29, 'Budget', 2.65, 19.73, 'Auto'], ['F', 91272.2, 'FreeLocal', 26.99, 40, 'CC'],\n ['T', 69000, 'FreeLocal', 11.63, 137, 'CC'], ['F', 1406.05, 'Budget', 11.55, 26.72, 'CC'],\n ['F', 73228.3, 'Budget', 22.47, 50.58, 'Auto'], ['F', 76231.9, 'FreeLocal', 2.01, 152.76, 'Auto'],\n ['T', 64792.3, 'FreeLocal', 13.05, 51.41, 'CH'], ['T', 93322.1, 'Budget', 29.92, 38.72, 'CH'],\n ['T', 63437.3, 'Budget', 0.68, 14.98, 'CC'], ['F', 49910.7, 'Budget', 27.42, 51.14, 'CC'],\n ['T', 76161.4, 'FreeLocal', 11.96, 37.55, 'CC'], ['F', 55860, 'FreeLocal', 16.01, 26.37, 'CC'],\n ['T', 12686, 'Budget', 23.23, 103.88, 'Auto'], ['F', 57360.8, 'FreeLocal', 10.36, 67.61, 'CC'],\n ['T', 92414.7, 'FreeLocal', 29.43, 40.06, 'CC'], ['T', 60102.7, 'FreeLocal', 9.84, 72.29, 'CH'],\n ['F', 17888.7, 'Budget', 29.41, 361.88, 'CC'], ['T', 12526.3, 'FreeLocal', 11.72, 40.59, 'CC'],\n ['T', 14578.8, 'Budget', 11.91, 107.02, 'Auto'], ['T', 78572.2, 'FreeLocal', 21.81, 51.09, 'CC'],\n ['F', 3933.74, 'Budget', 9.75, 57.67, 'CC'], ['F', 48238.8, 'FreeLocal', 23.28, 191.32, 'CC'],\n ['T', 28770.9, 'FreeLocal', 27.99, 49.6, 'CH'], ['F', 87578.2, 'Budget', 0.29, 22.44, 'CC'],\n ['F', 86695.4, 'FreeLocal', 25.94, 58.03, 'CC'], ['F', 76791.2, 'Budget', 20.71, 43.71, 'CC'],\n ['T', 30763.8, 'Budget', 21.32, 57.17, 'CC'], ['F', 3193.6, 'Budget', 4.19, 118.82, 'CH'],\n ['F', 83287, 'FreeLocal', 29.64, 119.82, 'Auto'], ['T', 2056.06, 'Budget', 24.07, 58.8, 'Auto'],\n ['F', 7776.6, 'FreeLocal', 25.87, 94.2, 'CC'], ['F', 2067.82, 'Budget', 15.25, 85.9, 'CC'],\n ['T', 77000, 'Budget', 4.58, 20.74, 'CC'], ['F', 69343.3, 'FreeLocal', 6.36, 21.91, 'CC'],\n ['F', 83287, 'Budget', 0.57, 24.46, 'Auto'], ['F', 14932.5, 'Budget', 4.91, 11.42, 'CC'],\n ['F', 27498.1, 'Budget', 2.2, 12.08, 'CC'], ['F', 21419.9, 'FreeLocal', 26.39, 129.51, 'CC'],\n ['F', 30665.2, 'FreeLocal', 5.83, 77.44, 'Auto'], ['F', 70000, 'FreeLocal', 6.08, 37.04, 'Auto'],\n ['F', 50561.3, 'Budget', 16.6, 129.91, 'CH'], ['T', 23464, 'Budget', 22.43, 64.14, 'CC'],\n ['F', 194.57, 'FreeLocal', 28.26, 67.21, 'CC'], ['F', 98680.4, 'FreeLocal', 17.58, 26.44, 'CH'],\n ['T', 65619.7, 'Budget', 13.56, 158.22, 'CC'], ['F', 95620.3, 'Budget', 10.91, 104.53, 'CC'],\n ['F', 85275, 'FreeLocal', 22.48, 174.09, 'Auto'], ['F', 66921.4, 'FreeLocal', 15.7, 24.67, 'CC'],\n ['F', 98453.6, 'FreeLocal', 13.72, 25.38, 'Auto'], ['F', 94026.8, 'FreeLocal', 25, 35.63, 'CC'],\n ['F', 57420, 'Budget', 25.18, 277.72, 'Auto'], ['T', 66666, 'FreeLocal', 3.93, 34.35, 'CC'],\n ['F', 47639.1, 'Budget', 17.48, 57.11, 'CC'], ['F', 63234.5, 'FreeLocal', 0, 1.16, 'CH'],\n ['F', 18296.4, 'FreeLocal', 0.08, 10.47, 'CC'], ['T', 39461, 'FreeLocal', 22.87, 126.68, 'CC'],\n ['F', 70000, 'FreeLocal', 22.82, 86.12, 'Auto'], ['F', 47371, 'Budget', 4.98, 270.97, 'CC'],\n ['F', 52957, 'FreeLocal', 25.79, 151.32, 'CH'], ['F', 86747.1, 'Budget', 20.15, 57.4, 'Auto'],\n ['F', 87404.6, 'Budget', 21.63, 160.84, 'Auto'], ['F', 85394, 'Budget', 19.28, 35.69, 'Auto'],\n ['T', 2121.36, 'FreeLocal', 2.02, 38.8, 'CC'], ['F', 63566.1, 'Budget', 7.94, 73.03, 'CH'],\n ['F', 89813.6, 'FreeLocal', 14.94, 166.18, 'CC'], ['F', 82644.2, 'FreeLocal', 21.97, 41.85, 'CC'],\n ['T', 27783.6, 'FreeLocal', 4.97, 29.58, 'CC'], ['F', 60485.5, 'Budget', 11.7, 40.41, 'Auto'],\n ['F', 809.43, 'FreeLocal', 0, 2.89, 'CH'], ['T', 76529.8, 'Budget', 18.46, 43.89, 'CC'],\n ['F', 34577.7, 'Budget', 29.18, 145.75, 'CH'], ['F', 66666, 'Budget', 27.56, 73.02, 'Auto'],\n ['T', 19008.4, 'FreeLocal', 10.54, 147.74, 'CC'],\n ['F', 98056.3, 'FreeLocal', 23.7, 150.67, 'Auto'], ['T', 80000, 'Budget', 0, 2.21, 'CH'],\n ['T', 78894.2, 'Budget', 2, 46.65, 'CH'], ['T', 16432.1, 'Budget', 20.41, 109.78, 'CH'],\n ['F', 62797.9, 'Budget', 8.32, 68.09, 'CH'], ['T', 71329.9, 'Budget', 14.27, 63.75, 'CC'],\n ['T', 20913.6, 'FreeLocal', 22.99, 95.93, 'CC'], ['T', 540.4, 'Budget', 12.34, 20.1, 'Auto'],\n ['F', 67339.8, 'FreeLocal', 27.83, 81.72, 'CC'], ['T', 75799.9, 'FreeLocal', 22.24, 94.06, 'CC'],\n ['T', 15688.5, 'Budget', 14.39, 22.42, 'CC'], ['T', 43382.3, 'FreeLocal', 29.67, 138.37, 'CH'],\n ['T', 5185.31, 'FreeLocal', 16.39, 52.9, 'CC'], ['T', 13011.4, 'Budget', 26.01, 134.45, 'CC'],\n ['T', 35000, 'Budget', 22.96, 106.53, 'CH'], ['F', 80087.7, 'FreeLocal', 8.74, 31.56, 'CC'],\n ['F', 59691.3, 'Budget', 21.94, 278.65, 'CC'], ['T', 11251.1, 'FreeLocal', 28.42, 141.91, 'CC'],\n ['T', 70908.7, 'FreeLocal', 7.7, 55.47, 'CC'], ['T', 94928.3, 'FreeLocal', 14.42, 93.78, 'CC'],\n ['F', 50622.3, 'FreeLocal', 20.45, 112.72, 'Auto'], ['T', 100020, 'FreeLocal', 16.2, 39.32, 'CC'],\n ['T', 65000, 'Budget', 29.55, 92.37, 'CH'], ['F', 93559.1, 'Budget', 1.52, 31.42, 'CC'],\n ['T', 56722.8, 'FreeLocal', 17.37, 74.77, 'CC'], ['T', 120000, 'Budget', 0, 3.22, 'CC'],\n ['T', 3416.62, 'Budget', 18.97, 123.7, 'CC'], ['F', 78000, 'Budget', 0.17, 10.39, 'Auto'],\n ['T', 73400, 'FreeLocal', 15.27, 40.9, 'CC'], ['F', 8032.16, 'FreeLocal', 29.68, 88.77, 'CC'],\n ['F', 93454.3, 'FreeLocal', 18.94, 44.13, 'Auto'], ['T', 5745, 'FreeLocal', 26.4, 44.11, 'CC'],\n ['F', 77000, 'Budget', 0.41, 215.96, 'Auto'], ['F', 92564.1, 'FreeLocal', 23.17, 74.86, 'Auto'],\n ['T', 68000, 'Budget', 4.91, 90.25, 'CH'], ['F', 48322.5, 'FreeLocal', 6.69, 50.29, 'CC'],\n ['F', 78373.5, 'Budget', 6.97, 199.91, 'Auto'], ['F', 81913.8, 'FreeLocal', 6.7, 53.03, 'CC'],\n ['T', 919.93, 'Budget', 27.28, 120.71, 'CH'], ['F', 69486.8, 'Budget', 7.72, 17.11, 'CC'],\n ['F', 24482.8, 'Budget', 0, 2, 'CH'], ['F', 14573.6, 'Budget', 26.61, 263.58, 'CC'],\n ['F', 92103.8, 'Budget', 7.42, 14.86, 'CC'], ['T', 8392.14, 'Budget', 25.03, 87.16, 'CH'],\n ['T', 17138.2, 'FreeLocal', 20.01, 104.69, 'CC'], ['F', 47010.1, 'Budget', 2.54, 167.31, 'CC'],\n ['F', 67239.4, 'FreeLocal', 12.89, 66.7, 'Auto'], ['F', 69406.7, 'FreeLocal', 6.9, 142.23, 'CC'],\n ['F', 83259.3, 'Budget', 0, 4.46, 'CC'], ['F', 20818.5, 'FreeLocal', 9.13, 63.28, 'Auto'],\n ['F', 2185.6, 'Budget', 7.12, 28.07, 'CH'], ['T', 76511.3, 'FreeLocal', 21.68, 42.52, 'CC'],\n ['T', 34555, 'FreeLocal', 25.77, 34.61, 'CH'], ['F', 11234.7, 'Budget', 0.69, 113.42, 'CC'],\n ['F', 36660.9, 'Budget', 0, 3.36, 'CH'], ['F', 68462.8, 'FreeLocal', 24.39, 90.84, 'CC'],\n ['F', 72841.3, 'Budget', 10.36, 82.53, 'CC'], ['F', 63670.8, 'FreeLocal', 27.39, 78.87, 'Auto'],\n ['T', 80000, 'Budget', 29.73, 70.7, 'CC'], ['F', 83287, 'Budget', 20.44, 120.53, 'Auto'],\n ['F', 12387.6, 'FreeLocal', 2, 93.85, 'Auto'], ['F', 82931.3, 'FreeLocal', 19.24, 137.25, 'Auto'],\n ['F', 57483.9, 'Budget', 17.01, 44.3, 'CH'], ['T', 21274, 'FreeLocal', 10.87, 43.31, 'Auto'],\n ['F', 28267, 'FreeLocal', 21.87, 214.41, 'CC'], ['F', 36725.1, 'Budget', 8.65, 94.88, 'CH'],\n ['T', 94188.3, 'Budget', 20.86, 41.51, 'CC'], ['F', 91861, 'Budget', 15.32, 22.06, 'CC'],\n ['T', 12374.9, 'FreeLocal', 17.49, 123.59, 'Auto'], ['T', 69133.9, 'FreeLocal', 8.58, 46.32, 'CH'],\n ['F', 84948, 'FreeLocal', 11.14, 23.73, 'CH'], ['F', 30998.8, 'Budget', 2.4, 52.91, 'Auto'],\n ['F', 21416.5, 'FreeLocal', 9.9, 27.61, 'CC'], ['F', 78554.2, 'Budget', 5.59, 35.88, 'Auto'],\n ['T', 3960.5, 'FreeLocal', 29.78, 96.13, 'Auto'], ['T', 60101.1, 'FreeLocal', 27.7, 157.96, 'CH'],\n ['F', 38215.9, 'Budget', 0, 0.97, 'Auto'], ['T', 13829.4, 'FreeLocal', 29, 176.61, 'CC'],\n ['F', 49745.3, 'Budget', 2.84, 27.28, 'CH'], ['F', 88427, 'Budget', 22.46, 69.97, 'CC'],\n ['F', 98003.7, 'FreeLocal', 1.03, 84.42, 'CC'], ['T', 89142.7, 'Budget', 3.76, 16.91, 'CC'],\n ['F', 74530.8, 'FreeLocal', 20.89, 127.89, 'Auto'], ['T', 40120, 'Budget', 30, 265.78, 'CC'],\n ['F', 76289.2, 'Budget', 22.2, 104.63, 'CC'], ['T', 66931.9, 'Budget', 11.72, 17.46, 'CC'],\n ['T', 40120, 'FreeLocal', 40, 108.3, 'CC'], ['T', 40120, 'FreeLocal', 26, 48.08, 'Auto'],\n ['T', 40120, 'Budget', 27, 168.28, 'CC'], ['T', 40120, 'Budget', 26, 65.79, 'CC'],\n ['T', 42000, 'Budget', 33, 41.78, 'Auto'], ['T', 40120, 'Budget', 33, 23.52, 'Auto'],\n ['T', 40120, 'FreeLocal', 37, 62.95, 'CC'], ['T', 40120, 'Budget', 28.45, 134.75, 'CC'],\n ['F', 90271.6, 'FreeLocal', 13.96, 110.4, 'CC'], ['F', 64816.6, 'Budget', 21, 27.87, 'CC'],\n ['F', 98217.1, 'FreeLocal', 29.49, 42.74, 'CC'], ['T', 2929.13, 'Budget', 14, 102.23, 'CH'],\n ['F', 41876.6, 'FreeLocal', 6.78, 139.44, 'CC'], ['T', 96223.4, 'FreeLocal', 11.81, 18.18, 'CC'],\n ['T', 15989.3, 'Budget', 3.67, 29.17, 'CC'], ['T', 69168.4, 'Budget', 14.16, 234.91, 'CC'],\n ['F', 92148.5, 'Budget', 2, 113.68, 'CC'], ['F', 96681, 'Budget', 2, 73.76, 'CC'],\n ['F', 62705.9, 'FreeLocal', 2, 33.44, 'CC'], ['F', 80221.2, 'FreeLocal', 2, 50.48, 'Auto'],\n ['F', 84479.2, 'FreeLocal', 2, 56.23, 'CC'], ['F', 64977.4, 'FreeLocal', 28.11, 45.77, 'CC'],\n ['T', 77994, 'FreeLocal', 12.4, 102.02, 'CH'], ['F', 90103.7, 'Budget', 12.23, 66.45, 'CC'],\n ['T', 59008.4, 'Budget', 12.86, 31.59, 'CC'], ['F', 5265.35, 'Budget', 2.33, 31.1, 'Auto'],\n ['F', 84978.1, 'FreeLocal', 5.03, 88.79, 'CH'], ['F', 36647.9, 'Budget', 21.41, 107.38, 'CC'],\n ['T', 64319.2, 'Budget', 3.01, 40.16, 'CH'], ['F', 73338, 'Budget', 20.92, 29.93, 'Auto'],\n ['T', 433.74, 'FreeLocal', 3.3, 44.22, 'CC'], ['F', 16962.2, 'Budget', 18.6, 27.57, 'CC'],\n ['F', 10708.3, 'Budget', 20.83, 142.95, 'CH'], ['T', 2031.61, 'Budget', 21.64, 109.04, 'CC'],\n ['F', 16938.5, 'FreeLocal', 13.35, 22.11, 'CH'], ['F', 55221, 'FreeLocal', 0.49, 15.69, 'CC'],\n ['F', 8073.11, 'FreeLocal', 28.7, 89.05, 'Auto'], ['F', 95448.6, 'Budget', 24.24, 29.46, 'CH'],\n ['T', 24141.5, 'FreeLocal', 28.82, 125.87, 'CC'], ['F', 63152.6, 'Budget', 29.93, 70.01, 'CC'],\n ['F', 31952, 'Budget', 0, 4.87, 'CC'], ['F', 72084.7, 'Budget', 29.11, 38.13, 'CC'],\n ['F', 42760.5, 'Budget', 13.47, 53.7, 'CC'], ['F', 49072, 'Budget', 23.5, 34.25, 'Auto'],\n ['F', 27371.8, 'FreeLocal', 16.14, 142.7, 'CC'], ['T', 71472.9, 'Budget', 16.02, 130.22, 'CH'],\n ['F', 95405.7, 'Budget', 7.74, 13.96, 'CC'], ['F', 95786.8, 'Budget', 21.33, 108.79, 'CC'],\n ['T', 90321.6, 'FreeLocal', 0.87, 12.39, 'CC'], ['T', 90478.6, 'FreeLocal', 18.02, 154.49, 'CC'],\n ['F', 56187, 'Budget', 8.09, 21.83, 'CH'], ['F', 28313.1, 'Budget', 6.89, 13.63, 'CC'],\n ['T', 41000, 'Budget', 23.56, 229.64, 'CC'], ['F', 29616, 'FreeLocal', 29.78, 75.29, 'CH'],\n ['F', 19732.8, 'FreeLocal', 24.81, 47.25, 'CC'], ['F', 96.33, 'Budget', 26.13, 59.01, 'CC'],\n ['F', 52004.8, 'Budget', 5.03, 28.14, 'CH'], ['F', 53010.8, 'FreeLocal', 12.45, 58.87, 'CC'],\n ['F', 75004.5, 'Budget', 26.52, 58.72, 'CC'], ['F', 19749.3, 'Budget', 20.22, 34.17, 'CC'],\n ['F', 57626.9, 'Budget', 9.38, 48.35, 'CC'], ['F', 20078, 'Budget', 9.65, 15.98, 'CC'],\n ['F', 47902, 'FreeLocal', 17.44, 72.31, 'Auto'], ['T', 7545.96, 'Budget', 22.39, 200.75, 'CC'],\n ['F', 78851.3, 'FreeLocal', 0.37, 29.04, 'CC'], ['T', 17540.7, 'Budget', 22.17, 36.2, 'Auto'],\n ['T', 83891.9, 'Budget', 28.92, 74.4, 'CH'], ['T', 28220.8, 'FreeLocal', 26.49, 38.95, 'CC'],\n ['T', 28589.1, 'FreeLocal', 13.19, 100.28, 'CC'], ['F', 5237.63, 'Budget', 13.32, 78.02, 'CC'],\n ['T', 89459.9, 'FreeLocal', 11.54, 36.05, 'CC'], ['T', 13576.5, 'Budget', 14.83, 40.49, 'CC'],\n ['F', 81710.9, 'FreeLocal', 20.95, 36.42, 'CC'], ['T', 67388, 'Budget', 4.79, 96.33, 'CC'],\n ['F', 57063, 'Budget', 16.79, 98.1, 'CH'], ['T', 84166.1, 'Budget', 3.28, 15.02, 'CC'],\n ['F', 45612.9, 'Budget', 12.53, 323.82, 'CC'], ['T', 7737.94, 'FreeLocal', 11.05, 61.9, 'CC'],\n ['T', 120000, 'Budget', 21.37, 314.62, 'CH'], ['F', 45287.6, 'Budget', 0, 2.97, 'CC'],\n ['T', 59613.1, 'Budget', 12.37, 175.78, 'CC'], ['T', 16326.7, 'FreeLocal', 0, 1.34, 'CC'],\n ['T', 9559.78, 'FreeLocal', 18.31, 77.91, 'CC'], ['F', 42031.8, 'Budget', 20.45, 59.78, 'CH'],\n ['F', 83284.1, 'FreeLocal', 26.91, 35.96, 'Auto'], ['F', 39229.1, 'Budget', 28.82, 47.1, 'CC'],\n ['F', 68427.4, 'FreeLocal', 23.76, 73.81, 'Auto'], ['T', 3601.71, 'Budget', 9.57, 125.6, 'Auto'],\n ['T', 98716.3, 'FreeLocal', 20.97, 43.13, 'CC'], ['F', 66182.7, 'Budget', 11.7, 58.87, 'Auto'],\n ['T', 84789.3, 'FreeLocal', 14.22, 33.47, 'CH'], ['T', 35976.5, 'FreeLocal', 18.85, 50.63, 'Auto'],\n ['F', 32703.1, 'Budget', 16.8, 72.89, 'CC'], ['F', 8204.72, 'FreeLocal', 15.59, 39.79, 'CH'],\n ['T', 97180.4, 'FreeLocal', 8.21, 63.51, 'CC'], ['F', 80405.1, 'FreeLocal', 2.91, 28.98, 'CC'],\n ['F', 38280, 'FreeLocal', 11.64, 86.61, 'Auto'], ['T', 64136.6, 'FreeLocal', 16.21, 142.37, 'CC'],\n ['T', 45429.7, 'FreeLocal', 24.7, 97.74, 'CH'], ['T', 25285.5, 'FreeLocal', 9.37, 21.3, 'CC'],\n ['F', 77551.1, 'Budget', 20.53, 62.42, 'CC'], ['T', 38538.4, 'FreeLocal', 22.86, 47.66, 'CC'],\n ['F', 92881.8, 'FreeLocal', 2.15, 93.57, 'CC'], ['T', 43634.5, 'Budget', 29.44, 143.5, 'CC'],\n ['T', 13109.1, 'Budget', 22.38, 62.87, 'Auto'], ['T', 92647.5, 'Budget', 16.04, 32.13, 'CC'],\n ['F', 21021.6, 'Budget', 2, 14.95, 'CC'], ['T', 74460.7, 'FreeLocal', 25.53, 206.46, 'CC'],\n ['T', 28787.4, 'Budget', 27.97, 86.06, 'Auto'], ['F', 13091.6, 'Budget', 22.79, 43.06, 'CC'],\n ['F', 62061.8, 'FreeLocal', 29.86, 82.08, 'Auto'], ['T', 20550.9, 'Budget', 27.72, 85.64, 'CC'],\n ['F', 1765.41, 'FreeLocal', 3.04, 47.99, 'CC'], ['T', 19131.1, 'Budget', 22.15, 57.07, 'Auto'],\n ['F', 42750.3, 'Budget', 20.59, 134.97, 'Auto'], ['T', 2842.55, 'Budget', 0, 0.79, 'Auto'],\n ['F', 22358.1, 'Budget', 15.54, 29.25, 'CC'], ['F', 47870.8, 'FreeLocal', 2, 13.82, 'CC'],\n ['F', 6440.46, 'Budget', 22.66, 49.86, 'CH'], ['T', 7325.5, 'FreeLocal', 28.52, 190.06, 'CC'],\n ['F', 28766.9, 'Budget', 6.11, 64.2, 'CC'], ['F', 72928.2, 'Budget', 7.45, 203.67, 'CC'],\n ['F', 91272.2, 'FreeLocal', 26.99, 40, 'CC'], ['T', 65000, 'FreeLocal', 11.63, 137, 'Auto'],\n ['F', 1406.05, 'Budget', 11.55, 26.72, 'CC'], ['F', 73228.3, 'Budget', 22.47, 50.58, 'Auto'],\n ['F', 76231.9, 'FreeLocal', 2.01, 152.76, 'Auto'], ['T', 64792.3, 'FreeLocal', 13.05, 51.41, 'CH'],\n ['T', 93322.1, 'Budget', 29.92, 38.72, 'CH'], ['T', 63437.3, 'Budget', 0.68, 14.98, 'CC'],\n ['F', 49910.7, 'Budget', 27.42, 51.14, 'CC'], ['T', 76161.4, 'FreeLocal', 11.96, 37.55, 'CC'],\n ['F', 55860, 'FreeLocal', 16.01, 26.37, 'CC'], ['T', 12686, 'Budget', 23.23, 103.88, 'Auto'],\n ['F', 57360.8, 'FreeLocal', 10.36, 67.61, 'CC'], ['T', 92414.7, 'FreeLocal', 29.43, 40.06, 'CC'],\n ['T', 60102.7, 'FreeLocal', 9.84, 72.29, 'CH'], ['F', 17888.7, 'Budget', 29.41, 361.88, 'CC'],\n ['T', 12526.3, 'FreeLocal', 11.72, 40.59, 'CC'], ['T', 14578.8, 'Budget', 11.91, 107.02, 'Auto'],\n ['T', 78572.2, 'FreeLocal', 21.81, 51.09, 'CC'], ['F', 3933.74, 'Budget', 9.75, 57.67, 'CC'],\n ['F', 48238.8, 'FreeLocal', 23.28, 191.32, 'CC'], ['T', 28770.9, 'FreeLocal', 27.99, 49.6, 'CH'],\n ['F', 87578.2, 'Budget', 0.29, 22.44, 'CC'], ['F', 86695.4, 'FreeLocal', 25.94, 58.03, 'CC'],\n ['F', 76791.2, 'Budget', 20.71, 43.71, 'CC'], ['T', 30763.8, 'Budget', 21.32, 57.17, 'CC'],\n ['F', 3193.6, 'Budget', 4.19, 118.82, 'CH'], ['F', 69680.9, 'FreeLocal', 7.67, 39.8, 'CC'],\n ['F', 77000, 'FreeLocal', 29.64, 119.82, 'Auto'], ['T', 2056.06, 'Budget', 24.07, 58.8, 'Auto'],\n ['F', 7776.6, 'FreeLocal', 25.87, 94.2, 'CC'], ['F', 2067.82, 'Budget', 15.25, 85.9, 'CC'],\n ['T', 78000, 'Budget', 4.58, 20.74, 'CC'], ['F', 69343.3, 'FreeLocal', 6.36, 21.91, 'CC'],\n ['F', 83287, 'Budget', 0.57, 24.46, 'Auto'], ['F', 14932.5, 'Budget', 4.91, 11.42, 'CC'],\n ['F', 27498.1, 'Budget', 2.2, 12.08, 'CC'], ['F', 21419.9, 'FreeLocal', 26.39, 129.51, 'CC'],\n ['F', 30665.2, 'FreeLocal', 5.83, 77.44, 'Auto'], ['F', 68000, 'FreeLocal', 6.08, 37.04, 'Auto'],\n ['F', 50561.3, 'Budget', 16.6, 129.91, 'CH'], ['T', 23464, 'Budget', 22.43, 64.14, 'CC'],\n ['F', 194.57, 'FreeLocal', 28.26, 67.21, 'CC'], ['F', 98680.4, 'FreeLocal', 17.58, 26.44, 'CH'],\n ['T', 65619.7, 'Budget', 13.56, 158.22, 'CC'], ['F', 95620.3, 'Budget', 10.91, 104.53, 'CC'],\n ['F', 85275, 'FreeLocal', 22.48, 174.09, 'Auto'], ['F', 66921.4, 'FreeLocal', 15.7, 24.67, 'CC'],\n ['F', 98453.6, 'FreeLocal', 13.72, 25.38, 'Auto'], ['F', 94026.8, 'FreeLocal', 25, 35.63, 'CC'],\n ['F', 57420, 'Budget', 25.18, 277.72, 'Auto'], ['T', 80000, 'FreeLocal', 3.93, 34.35, 'CC'],\n ['F', 47639.1, 'Budget', 17.48, 57.11, 'CC'], ['F', 63234.5, 'FreeLocal', 0, 1.16, 'CH'],\n ['F', 46945, 'Budget', 18.96, 49.6, 'CC'], ['F', 3911.9, 'Budget', 5.72, 39.36, 'CC'],\n ['F', 71816.1, 'FreeLocal', 26.57, 51.83, 'CC'], ['F', 18296.4, 'FreeLocal', 0.08, 10.47, 'CC'],\n ['T', 39461, 'FreeLocal', 22.87, 126.68, 'CC'], ['F', 71502.5, 'FreeLocal', 0, 0.68, 'CC'],\n ['F', 66000, 'FreeLocal', 22.82, 86.12, 'Auto'], ['F', 95011.5, 'FreeLocal', 0, 2.83, 'CC'],\n ['F', 47371, 'Budget', 4.98, 270.97, 'CC'], ['F', 52957, 'FreeLocal', 25.79, 151.32, 'CH'],\n ['F', 86747.1, 'Budget', 20.15, 57.4, 'Auto'], ['F', 57942.4, 'Budget', 19.35, 124.69, 'CH'],\n ['F', 87404.6, 'Budget', 21.63, 160.84, 'Auto'], ['F', 20919, 'FreeLocal', 6.26, 164.54, 'CC'],\n ['F', 85394, 'Budget', 19.28, 35.69, 'Auto'], ['T', 2121.36, 'FreeLocal', 2.02, 38.8, 'CC'],\n ['F', 63566.1, 'Budget', 7.94, 73.03, 'CH'], ['F', 52089.6, 'FreeLocal', 10.81, 23.87, 'CC'],\n ['F', 58328.8, 'FreeLocal', 7.37, 131.25, 'CC'], ['F', 89813.6, 'FreeLocal', 14.94, 166.18, 'CC'],\n ['F', 82644.2, 'FreeLocal', 21.97, 41.85, 'CC'], ['T', 27783.6, 'FreeLocal', 4.97, 29.58, 'CC'],\n ['F', 86252.8, 'Budget', 1.46, 45.44, 'CC'], ['F', 38738.3, 'Budget', 11.55, 59.73, 'CC'],\n ['F', 60485.5, 'Budget', 11.7, 40.41, 'Auto'], ['T', 56722.8, 'FreeLocal', 17.37, 74.77, 'CC'],\n ['T', 55000, 'FreeLocal', 0.37, 29.04, 'CC'], ['F', 809.43, 'FreeLocal', 0, 2.89, 'CH'],\n ['T', 76529.8, 'Budget', 18.46, 43.89, 'CC'], ['F', 34577.7, 'Budget', 29.18, 145.75, 'CH'],\n ['T', 23000, 'Budget', 28.92, 74.4, 'CH'], ['F', 77000, 'Budget', 27.56, 73.02, 'Auto'],\n ['T', 19008.4, 'FreeLocal', 10.54, 147.74, 'CC'],\n ['F', 98056.3, 'FreeLocal', 23.7, 150.67, 'Auto'], ['T', 73400, 'Budget', 0, 2.21, 'CH'],\n ['F', 53432.2, 'FreeLocal', 12.56, 96.04, 'CH'], ['T', 78894.2, 'Budget', 2, 46.65, 'CH'],\n ['T', 16432.1, 'Budget', 20.41, 109.78, 'CH'], ['T', 62797.9, 'Budget', 8.32, 68.09, 'CH'],\n ['T', 71329.9, 'Budget', 14.27, 63.75, 'CC'], ['F', 91498.9, 'Budget', 21.52, 46.88, 'CC'],\n ['T', 3601.71, 'Budget', 9.57, 125.6, 'Auto'], ['F', 33084.3, 'Budget', 19.77, 125.05, 'CH'],\n ['T', 20913.6, 'FreeLocal', 22.99, 95.93, 'CC'], ['F', 62724.5, 'FreeLocal', 21.99, 82.69, 'Auto'],\n ['F', 49553.9, 'FreeLocal', 29.94, 78.54, 'CC'], ['T', 540.4, 'Budget', 12.34, 20.1, 'Auto'],\n ['T', 57255.4, 'FreeLocal', 27.05, 107.41, 'CC'], ['F', 71941.5, 'FreeLocal', 7.99, 103.21, 'CH'],\n ['T', 72583, 'FreeLocal', 5.97, 41.3, 'CH'], ['F', 67339.8, 'FreeLocal', 27.83, 81.72, 'CC'],\n ['F', 88759.5, 'FreeLocal', 29.3, 143.93, 'CC'], ['T', 75799.9, 'FreeLocal', 22.24, 94.06, 'CC'],\n ['T', 15688.5, 'Budget', 14.39, 22.42, 'CC'], ['T', 43382.3, 'FreeLocal', 29.67, 138.37, 'CH'],\n ['T', 2805.01, 'FreeLocal', 19.93, 38.08, 'CC'], ['T', 5185.31, 'FreeLocal', 16.39, 52.9, 'CC'],\n ['T', 42000, 'Budget', 26.01, 134.45, 'CC'], ['T', 38000, 'Budget', 22.96, 106.53, 'CH'],\n ['T', 81641.2, 'FreeLocal', 13.93, 98.76, 'CC'], ['F', 80087.7, 'FreeLocal', 8.74, 31.56, 'CC'],\n ['F', 59691.3, 'Budget', 21.94, 278.65, 'CC'], ['T', 11251.1, 'FreeLocal', 28.42, 141.91, 'CC'],\n ['T', 70908.7, 'FreeLocal', 7.7, 55.47, 'CC'], ['T', 94928.3, 'FreeLocal', 14.42, 93.78, 'CC'],\n ['F', 50622.3, 'FreeLocal', 20.45, 112.72, 'Auto'], ['T', 78000, 'FreeLocal', 16.2, 39.32, 'CH'],\n ['T', 78000, 'Budget', 29.55, 92.37, 'CH'], ['F', 93559.1, 'Budget', 1.52, 31.42, 'CC'],\n ['T', 56722.8, 'FreeLocal', 17.37, 74.77, 'CC'], ['F', 80000, 'Budget', 0, 3.22, 'CC'],\n ['T', 3416.62, 'Budget', 18.97, 123.7, 'CC'], ['F', 73069.1, 'Budget', 0.17, 10.39, 'Auto'],\n ['T', 80000, 'FreeLocal', 15.27, 40.9, 'CC'], ['F', 8032.16, 'FreeLocal', 29.68, 88.77, 'CC'],\n ['F', 93454.3, 'FreeLocal', 18.94, 44.13, 'Auto'], ['T', 5745, 'FreeLocal', 26.4, 44.11, 'CC'],\n ['F', 83287, 'Budget', 0.41, 215.96, 'Auto'], ['F', 92564.1, 'FreeLocal', 23.17, 74.86, 'Auto'],\n ['T', 70000, 'Budget', 4.91, 90.25, 'CH'], ['F', 48322.5, 'FreeLocal', 6.69, 50.29, 'CC'],\n ['F', 78373.5, 'Budget', 6.97, 199.91, 'Auto'], ['F', 81913.8, 'FreeLocal', 6.7, 53.03, 'CC'],\n ['T', 919.93, 'Budget', 27.28, 120.71, 'CH'], ['F', 69486.8, 'Budget', 7.72, 17.11, 'CC'],\n ['F', 24482.8, 'Budget', 0, 2, 'CH'], ['F', 14573.6, 'Budget', 26.61, 263.58, 'CC'],\n ['F', 92103.8, 'Budget', 7.42, 14.86, 'CC'], ['T', 8392.14, 'Budget', 25.03, 87.16, 'CH'],\n ['T', 17138.2, 'FreeLocal', 20.01, 104.69, 'CC'], ['F', 47010.1, 'Budget', 2.54, 167.31, 'CC'],\n ['F', 67239.4, 'FreeLocal', 12.89, 66.7, 'Auto'], ['T', 69406.7, 'FreeLocal', 6.9, 142.23, 'CC'],\n ['F', 83259.3, 'Budget', 0, 4.46, 'CC'], ['F', 2185.6, 'Budget', 7.12, 28.07, 'CH'],\n ['T', 76511.3, 'FreeLocal', 21.68, 42.52, 'CC'], ['T', 35000, 'FreeLocal', 27, 34.61, 'CH'],\n ['F', 11234.7, 'Budget', 0.69, 113.42, 'CC'], ['F', 36660.9, 'Budget', 0, 3.36, 'CH'],\n ['F', 68462.8, 'FreeLocal', 24.39, 90.84, 'CC'], ['F', 72841.3, 'Budget', 10.36, 82.53, 'CC'],\n ['F', 63670.8, 'FreeLocal', 27.39, 78.87, 'Auto'], ['T', 66666, 'Budget', 29.73, 70.7, 'CC'],\n ['F', 77000, 'Budget', 20.44, 120.53, 'Auto'], ['F', 12387.6, 'FreeLocal', 2, 93.85, 'Auto'],\n ['F', 82931.3, 'FreeLocal', 19.24, 137.25, 'Auto'], ['F', 57483.9, 'Budget', 17.01, 44.3, 'CH'],\n ['T', 21274, 'FreeLocal', 10.87, 43.31, 'Auto'], ['F', 28267, 'FreeLocal', 21.87, 214.41, 'CC'],\n ['F', 36725.1, 'Budget', 8.65, 94.88, 'CH'], ['T', 94188.3, 'Budget', 20.86, 41.51, 'CC'],\n ['F', 91861, 'Budget', 15.32, 22.06, 'CC'], ['T', 12374.9, 'FreeLocal', 17.49, 123.59, 'Auto'],\n ['F', 69133.9, 'FreeLocal', 8.58, 46.32, 'CH'], ['F', 84948, 'FreeLocal', 11.14, 23.73, 'CH'],\n ['F', 30998.8, 'Budget', 2.4, 52.91, 'Auto'], ['F', 21416.5, 'FreeLocal', 9.9, 27.61, 'CC'],\n ['F', 78554.2, 'Budget', 5.59, 35.88, 'Auto'], ['T', 3960.5, 'FreeLocal', 29.78, 96.13, 'Auto'],\n ['T', 60101.1, 'FreeLocal', 27.7, 157.96, 'CH'], ['F', 38215.9, 'Budget', 0, 0.97, 'Auto'],\n ['T', 40120, 'FreeLocal', 30, 176.61, 'CC'], ['F', 49745.3, 'Budget', 2.84, 27.28, 'CH'],\n ['F', 88427, 'Budget', 22.46, 69.97, 'CC'], ['F', 98003.7, 'FreeLocal', 1.03, 84.42, 'CC'],\n ['T', 89142.7, 'Budget', 3.76, 16.91, 'CC'], ['F', 74530.8, 'FreeLocal', 20.89, 127.89, 'Auto'],\n ['T', 40120, 'Budget', 37, 265.78, 'CC'], ['F', 76289.2, 'Budget', 22.2, 104.63, 'CC'],\n ['T', 66931.9, 'Budget', 11.72, 17.46, 'CC'], ['T', 40120, 'FreeLocal', 32, 108.3, 'CC'],\n ['T', 14085.5, 'FreeLocal', 39, 48.08, 'Auto'], ['T', 32962.6, 'Budget', 59, 168.28, 'CC'],\n ['T', 42000, 'Budget', 43, 65.79, 'CC'], ['T', 43000, 'Budget', 39, 41.78, 'Auto'],\n ['F', 77726.4, 'Budget', 14, 23.52, 'Auto'], ['T', 42000, 'FreeLocal', 59, 62.95, 'CC'],\n ['T', 2800.68, 'Budget', 28.45, 134.75, 'CC'], ['F', 90271.6, 'FreeLocal', 13.96, 110.4, 'CC'],\n ['F', 64816.6, 'Budget', 21, 27.87, 'CC'], ['F', 98217.1, 'FreeLocal', 29.49, 42.74, 'CC'],\n ['T', 2929.13, 'Budget', 14, 102.23, 'CH'], ['F', 41876.6, 'FreeLocal', 6.78, 139.44, 'CC'],\n ['T', 96223.4, 'FreeLocal', 11.81, 18.18, 'CC'], ['T', 15989.3, 'Budget', 3.67, 29.17, 'CC'],\n ['T', 69168.4, 'Budget', 14.16, 234.91, 'CC'], ['F', 92148.5, 'Budget', 2, 113.68, 'CC'],\n ['F', 96681, 'Budget', 2, 73.76, 'CC'], ['F', 62705.9, 'FreeLocal', 2, 33.44, 'CC'],\n ['F', 80221.2, 'FreeLocal', 2, 50.48, 'Auto'], ['F', 84479.2, 'FreeLocal', 1, 56.23, 'CC'],\n ['F', 64977.4, 'FreeLocal', 28.11, 45.77, 'CC'], ['T', 77994, 'FreeLocal', 12.4, 102.02, 'CH'],\n ['F', 90103.7, 'Budget', 12.23, 66.45, 'CC'], ['T', 59008.4, 'Budget', 12.86, 31.59, 'CC'],\n ['F', 5265.35, 'Budget', 2.33, 31.1, 'Auto'], ['F', 84978.1, 'FreeLocal', 5.03, 88.79, 'CH'],\n ['T', 36647.9, 'Budget', 21.41, 107.38, 'CC'], ['T', 64319.2, 'Budget', 3.01, 40.16, 'CH'],\n ['F', 73338, 'Budget', 20.92, 29.93, 'Auto'], ['T', 433.74, 'FreeLocal', 3.3, 44.22, 'CC'],\n ['F', 16962.2, 'Budget', 18.6, 27.57, 'CC'], ['F', 10708.3, 'Budget', 20.83, 142.95, 'CH'],\n ['T', 2031.61, 'Budget', 21.64, 109.04, 'CC'], ['F', 16938.5, 'FreeLocal', 13.35, 22.11, 'CH'],\n ['F', 55221, 'FreeLocal', 0.49, 15.69, 'CC'], ['F', 8073.11, 'FreeLocal', 28.7, 89.05, 'Auto'],\n ['F', 95448.6, 'Budget', 24.24, 29.46, 'CH'], ['T', 24141.5, 'FreeLocal', 28.82, 125.87, 'CC'],\n ['F', 63152.6, 'Budget', 29.93, 70.01, 'CC'], ['F', 72084.7, 'Budget', 29.11, 38.13, 'CC'],\n ['F', 42760.5, 'Budget', 13.47, 53.7, 'CC'], ['F', 49072, 'Budget', 23.5, 34.25, 'Auto'],\n ['F', 27371.8, 'FreeLocal', 16.14, 142.7, 'CC'], ['T', 71472.9, 'Budget', 16.02, 130.22, 'CH'],\n ['F', 95405.7, 'Budget', 7.74, 13.96, 'CC'], ['F', 95786.8, 'Budget', 21.33, 108.79, 'CC'],\n ['T', 90321.6, 'FreeLocal', 0.87, 12.39, 'CC'], ['T', 90478.6, 'FreeLocal', 18.02, 154.49, 'CH'],\n ['F', 56187, 'Budget', 8.09, 21.83, 'CH'], ['T', 42000, 'Budget', 23.56, 229.64, 'CC'],\n ['F', 9780.66, 'FreeLocal', 2.8, 21.39, 'CC'], ['F', 29616, 'FreeLocal', 29.78, 75.29, 'CH'],\n ['F', 19732.8, 'FreeLocal', 24.81, 47.25, 'CC'], ['F', 41690.5, 'FreeLocal', 2.5, 31.45, 'CC'],\n ['F', 96.33, 'Budget', 26.13, 59.01, 'CC'], ['F', 52004.8, 'Budget', 5.03, 28.14, 'CH'],\n ['F', 53010.8, 'FreeLocal', 12.45, 58.87, 'CC'], ['F', 75004.5, 'Budget', 26.52, 58.72, 'CC'],\n ['F', 19749.3, 'Budget', 20.22, 34.17, 'CC'], ['F', 57626.9, 'Budget', 9.38, 48.35, 'CC'],\n ['F', 20078, 'Budget', 9.65, 15.98, 'CC'], ['F', 47902, 'FreeLocal', 17.44, 72.31, 'Auto'],\n ['T', 7545.96, 'Budget', 22.39, 200.75, 'CC'], ['T', 78851.3, 'FreeLocal', 0.37, 29.04, 'CC'],\n ['T', 17540.7, 'Budget', 22.17, 36.2, 'Auto'], ['T', 83891.9, 'Budget', 28.92, 74.4, 'CH'],\n ['T', 28220.8, 'FreeLocal', 26.49, 38.95, 'CC'], ['T', 28589.1, 'FreeLocal', 13.19, 100.28, 'CC'],\n ['F', 5237.63, 'Budget', 13.32, 78.02, 'CC'], ['T', 89459.9, 'FreeLocal', 11.54, 36.05, 'CC'],\n ['T', 13576.5, 'Budget', 14.83, 40.49, 'CC'], ['T', 67388, 'Budget', 4.79, 96.33, 'CC'],\n ['F', 57063, 'Budget', 16.79, 98.1, 'CH'], ['T', 84166.1, 'Budget', 3.28, 15.02, 'CC'],\n ['F', 45612.9, 'Budget', 12.53, 323.82, 'CC'], ['T', 7737.94, 'FreeLocal', 11.05, 61.9, 'CC'],\n ['T', 65000, 'Budget', 21.37, 314.62, 'CH'], ['F', 45287.6, 'Budget', 0, 2.97, 'CC'],\n ['T', 59613.1, 'Budget', 12.37, 175.78, 'CC'], ['T', 16326.7, 'FreeLocal', 0, 1.34, 'CC'],\n ['T', 9559.78, 'FreeLocal', 18.31, 77.91, 'CC'], ['F', 42031.8, 'Budget', 20.45, 59.78, 'CH'],\n ['F', 83284.1, 'FreeLocal', 26.91, 35.96, 'Auto'], ['F', 39229.1, 'Budget', 28.82, 47.1, 'CC'],\n ['F', 68427.4, 'FreeLocal', 23.76, 73.81, 'Auto'], ['T', 3601.71, 'Budget', 9.57, 125.6, 'Auto'],\n ['T', 98716.3, 'FreeLocal', 20.97, 43.13, 'CC'], ['F', 66182.7, 'Budget', 11.7, 58.87, 'Auto'],\n ['T', 84789.3, 'FreeLocal', 14.22, 33.47, 'CH'], ['T', 35976.5, 'FreeLocal', 18.85, 50.63, 'Auto'],\n ['F', 32703.1, 'Budget', 16.8, 72.89, 'CC'], ['F', 8204.72, 'FreeLocal', 15.59, 39.79, 'CH'],\n ['F', 97180.4, 'FreeLocal', 8.21, 63.51, 'Auto'], ['T', 38280, 'FreeLocal', 11.64, 86.61, 'Auto'],\n ['T', 64136.6, 'FreeLocal', 16.21, 142.37, 'CC'], ['T', 45429.7, 'FreeLocal', 24.7, 97.74, 'CH'],\n ['T', 25285.5, 'FreeLocal', 9.37, 21.3, 'CC'], ['F', 77551.1, 'Budget', 20.53, 62.42, 'CC'],\n ['T', 38538.4, 'FreeLocal', 22.86, 47.66, 'CC'], ['F', 92881.8, 'FreeLocal', 2.15, 93.57, 'CC'],\n ['T', 43634.5, 'Budget', 29.44, 143.5, 'CC'], ['T', 13109.1, 'Budget', 22.38, 62.87, 'Auto'],\n ['T', 92647.5, 'Budget', 16.04, 32.13, 'CC'], ['F', 21021.6, 'Budget', 2, 14.95, 'CC'],\n ['T', 74460.7, 'FreeLocal', 25.53, 206.46, 'CC'], ['T', 28787.4, 'Budget', 27.97, 86.06, 'Auto'],\n ['F', 13091.6, 'Budget', 22.79, 43.06, 'CC'], ['F', 62061.8, 'FreeLocal', 29.86, 82.08, 'Auto'],\n ['T', 20550.9, 'Budget', 27.72, 85.64, 'CC'], ['F', 1765.41, 'FreeLocal', 3.04, 47.99, 'CC'],\n ['T', 19131.1, 'Budget', 22.15, 57.07, 'Auto'], ['F', 42750.3, 'Budget', 20.59, 134.97, 'Auto'],\n ['T', 2842.55, 'Budget', 0, 0.79, 'Auto'], ['F', 22358.1, 'Budget', 15.54, 29.25, 'CC'],\n ['F', 47870.8, 'FreeLocal', 7, 13.82, 'CC'], ['F', 6440.46, 'Budget', 22.66, 49.86, 'CH'],\n ['T', 7325.5, 'FreeLocal', 28.52, 190.06, 'CC'], ['F', 63900.9, 'Budget', 8.36, 47.4, 'CC'],\n ['F', 28766.9, 'Budget', 6.11, 64.2, 'CC'], ['F', 5252.29, 'Budget', 2.65, 19.73, 'Auto'],\n ['F', 91272.2, 'FreeLocal', 26.99, 40, 'CC'], ['T', 69000, 'FreeLocal', 11.63, 137, 'CH'],\n ['F', 1406.05, 'Budget', 11.55, 26.72, 'CC'], ['F', 73228.3, 'Budget', 22.47, 50.58, 'Auto'],\n ['F', 76231.9, 'FreeLocal', 2.01, 152.76, 'Auto'], ['T', 64792.3, 'FreeLocal', 13.05, 51.41, 'CH'],\n ['T', 93322.1, 'Budget', 29.92, 38.72, 'CH'], ['T', 63437.3, 'Budget', 0.68, 14.98, 'CC'],\n ['F', 49910.7, 'Budget', 27.42, 51.14, 'CC'], ['T', 76161.4, 'FreeLocal', 11.96, 37.55, 'CC'],\n ['F', 55860, 'FreeLocal', 16.01, 26.37, 'CC'], ['T', 12686, 'Budget', 23.23, 103.88, 'Auto'],\n ['F', 57360.8, 'FreeLocal', 10.36, 67.61, 'CC'], ['T', 92414.7, 'FreeLocal', 29.43, 40.06, 'CC'],\n ['T', 60102.7, 'FreeLocal', 9.84, 72.29, 'CH'], ['F', 17888.7, 'Budget', 29.41, 361.88, 'CC'],\n ['T', 12526.3, 'FreeLocal', 11.72, 40.59, 'CC'], ['T', 14578.8, 'Budget', 11.91, 107.02, 'Auto'],\n ['T', 78572.2, 'FreeLocal', 21.81, 51.09, 'CC'], ['F', 48238.8, 'FreeLocal', 23.28, 191.32, 'CC'],\n ['F', 28770.9, 'FreeLocal', 27.99, 49.6, 'CH'], ['F', 87578.2, 'Budget', 0.29, 22.44, 'CC'],\n ['F', 86695.4, 'FreeLocal', 25.94, 58.03, 'CC'], ['F', 76791.2, 'Budget', 20.71, 43.71, 'CC'],\n ['T', 30763.8, 'Budget', 21.32, 57.17, 'CC'], ['F', 3193.6, 'Budget', 4.19, 118.82, 'CH'],\n ['F', 69680.9, 'FreeLocal', 7.67, 39.8, 'CC'], ['F', 83287, 'FreeLocal', 29.64, 119.82, 'Auto'],\n ['T', 2056.06, 'Budget', 24.07, 58.8, 'Auto'], ['F', 7776.6, 'FreeLocal', 25.87, 94.2, 'CC'],\n ['F', 2067.82, 'Budget', 15.25, 85.9, 'CC'], ['T', 68000, 'Budget', 4.58, 20.74, 'CC'],\n ['T', 69343.3, 'FreeLocal', 6.36, 21.91, 'CC'], ['F', 14932.5, 'Budget', 4.91, 11.42, 'CC'],\n ['F', 27498.1, 'Budget', 2.2, 12.08, 'CC'], ['F', 21419.9, 'FreeLocal', 26.39, 129.51, 'CC'],\n ['F', 30665.2, 'FreeLocal', 5.83, 77.44, 'Auto'], ['F', 78000, 'FreeLocal', 6.08, 37.04, 'Auto'],\n ['F', 50561.3, 'Budget', 16.6, 129.91, 'CH'], ['T', 23464, 'Budget', 22.43, 64.14, 'CC'],\n ['F', 194.57, 'FreeLocal', 28.26, 67.21, 'CC'], ['F', 98680.4, 'FreeLocal', 17.58, 26.44, 'CH'],\n ['T', 65619.7, 'Budget', 13.56, 158.22, 'CC'], ['F', 95620.3, 'Budget', 10.91, 104.53, 'CC'],\n ['F', 85275, 'FreeLocal', 22.48, 174.09, 'Auto'], ['F', 66921.4, 'FreeLocal', 15.7, 24.67, 'CC'],\n ['F', 98453.6, 'FreeLocal', 13.72, 25.38, 'Auto'], ['F', 94026.8, 'FreeLocal', 25, 35.63, 'CC'],\n ['F', 57420, 'Budget', 25.18, 277.72, 'Auto'], ['T', 68000, 'FreeLocal', 3.93, 34.35, 'CC'],\n ['F', 47639.1, 'Budget', 17.48, 57.11, 'CC'], ['F', 63234.5, 'FreeLocal', 0, 1.16, 'CH'],\n ['F', 3911.9, 'Budget', 5.72, 39.36, 'CC'], ['F', 18296.4, 'FreeLocal', 0.08, 10.47, 'CC'],\n ['T', 39461, 'FreeLocal', 22.87, 126.68, 'CC'], ['F', 52957, 'FreeLocal', 25.79, 151.32, 'CH'],\n ['F', 86747.1, 'Budget', 20.15, 57.4, 'Auto'], ['F', 87404.6, 'Budget', 21.63, 160.84, 'Auto'],\n ['F', 85394, 'Budget', 19.28, 35.69, 'Auto'], ['T', 2121.36, 'FreeLocal', 2.02, 38.8, 'CC'],\n ['F', 63566.1, 'Budget', 7.94, 73.03, 'CH'], ['F', 89813.6, 'FreeLocal', 14.94, 166.18, 'CC'],\n ['F', 82644.2, 'FreeLocal', 21.97, 41.85, 'CC'], ['T', 27783.6, 'FreeLocal', 4.97, 29.58, 'CC'],\n ['F', 60485.5, 'Budget', 11.7, 40.41, 'Auto'], ['F', 809.43, 'FreeLocal', 0, 2.89, 'CH'],\n ['T', 76529.8, 'Budget', 18.46, 43.89, 'CC'], ['F', 34577.7, 'Budget', 29.18, 145.75, 'CH'],\n ['T', 19008.4, 'FreeLocal', 10.54, 147.74, 'CC'],\n ['F', 98056.3, 'FreeLocal', 23.7, 150.67, 'Auto'], ['T', 80000, 'Budget', 0, 2.21, 'CH'],\n ['F', 78894.2, 'Budget', 2, 46.65, 'CH'], ['T', 16432.1, 'Budget', 20.41, 109.78, 'CH'],\n ['T', 62797.9, 'Budget', 8.32, 68.09, 'CH'], ['F', 71329.9, 'Budget', 14.27, 63.75, 'CC'],\n ['T', 20913.6, 'FreeLocal', 22.99, 95.93, 'CC'], ['T', 540.4, 'Budget', 12.34, 20.1, 'Auto'],\n ['F', 67339.8, 'FreeLocal', 27.83, 81.72, 'CC'], ['T', 75799.9, 'FreeLocal', 22.24, 94.06, 'CC'],\n ['T', 15688.5, 'Budget', 14.39, 22.42, 'CC'], ['T', 43382.3, 'FreeLocal', 29.67, 138.37, 'CH'],\n ['T', 5185.31, 'FreeLocal', 16.39, 52.9, 'CC'], ['T', 35089, 'Budget', 26.01, 134.45, 'CC'],\n ['T', 37000, 'Budget', 22.96, 106.53, 'CH'], ['F', 80087.7, 'FreeLocal', 8.74, 31.56, 'CC'],\n ['F', 59691.3, 'Budget', 21.94, 278.65, 'CC'], ['T', 11251.1, 'FreeLocal', 28.42, 141.91, 'CC'],\n ['T', 70908.7, 'FreeLocal', 7.7, 55.47, 'CC'], ['T', 94928.3, 'FreeLocal', 14.42, 93.78, 'CH'],\n ['F', 50622.3, 'FreeLocal', 20.45, 112.72, 'Auto'], ['T', 100020, 'FreeLocal', 16.2, 39.32, 'CC'],\n ['T', 69000, 'Budget', 29.55, 92.37, 'CH'], ['F', 37626, 'Budget', 7.5, 87.12, 'CH'],\n ['T', 56722.8, 'FreeLocal', 17.37, 74.77, 'CC'], ['T', 120000, 'Budget', 0, 3.22, 'CC'],\n ['T', 3416.62, 'Budget', 18.97, 123.7, 'CC'], ['F', 73069.1, 'Budget', 0.17, 10.39, 'Auto'],\n ['T', 80000, 'FreeLocal', 15.27, 40.9, 'CC'], ['F', 8032.16, 'FreeLocal', 29.68, 88.77, 'CC'],\n ['F', 93454.3, 'FreeLocal', 18.94, 44.13, 'Auto'], ['T', 5745, 'FreeLocal', 26.4, 44.11, 'CC'],\n ['F', 92564.1, 'FreeLocal', 23.17, 74.86, 'Auto'], ['F', 48322.5, 'FreeLocal', 6.69, 50.29, 'CC'],\n ['F', 81913.8, 'FreeLocal', 6.7, 53.03, 'CC'], ['T', 919.93, 'Budget', 27.28, 120.71, 'CH'],\n ['F', 69486.8, 'Budget', 7.72, 17.11, 'CC'], ['F', 24482.8, 'Budget', 0, 2, 'CH'],\n ['F', 92103.8, 'Budget', 7.42, 14.86, 'CC'], ['T', 8392.14, 'Budget', 25.03, 87.16, 'CH'],\n ['T', 17138.2, 'FreeLocal', 20.01, 104.69, 'CC'], ['F', 47010.1, 'Budget', 2.54, 167.31, 'CC'],\n ['F', 67239.4, 'FreeLocal', 12.89, 66.7, 'Auto'], ['T', 69406.7, 'FreeLocal', 6.9, 142.23, 'CC'],\n ['F', 83259.3, 'Budget', 0, 4.46, 'CC'], ['F', 20818.5, 'FreeLocal', 9.13, 63.28, 'Auto'],\n ['F', 2185.6, 'Budget', 7.12, 28.07, 'CH'], ['T', 76511.3, 'FreeLocal', 21.68, 42.52, 'CC'],\n ['T', 6946.07, 'FreeLocal', 43, 34.61, 'CH'], ['F', 11234.7, 'Budget', 0.69, 113.42, 'CC'],\n ['F', 36660.9, 'Budget', 0, 3.36, 'CH'], ['F', 68462.8, 'FreeLocal', 24.39, 90.84, 'CC'],\n ['F', 72841.3, 'Budget', 10.36, 82.53, 'CC'], ['T', 63670.8, 'FreeLocal', 27.39, 78.87, 'Auto'],\n ['F', 12387.6, 'FreeLocal', 3, 93.85, 'Auto'], ['F', 82931.3, 'FreeLocal', 19.24, 137.25, 'Auto'],\n ['F', 57483.9, 'Budget', 17.01, 44.3, 'CH'], ['T', 21274, 'FreeLocal', 10.87, 43.31, 'Auto'],\n ['F', 28267, 'FreeLocal', 21.87, 214.41, 'CC'], ['F', 36725.1, 'Budget', 8.65, 94.88, 'CH'],\n ['T', 94188.3, 'Budget', 20.86, 41.51, 'CC'], ['F', 91861, 'Budget', 15.32, 22.06, 'CC'],\n ['T', 12374.9, 'FreeLocal', 17.49, 123.59, 'Auto'], ['T', 69133.9, 'FreeLocal', 8.58, 46.32, 'CH'],\n ['F', 84948, 'FreeLocal', 11.14, 23.73, 'CH'], ['F', 30998.8, 'Budget', 2.4, 52.91, 'Auto'],\n ['F', 21416.5, 'FreeLocal', 9.9, 27.61, 'CC'], ['F', 78554.2, 'Budget', 5.59, 35.88, 'Auto'],\n ['T', 3960.5, 'FreeLocal', 29.78, 96.13, 'Auto'], ['T', 60101.1, 'FreeLocal', 27.7, 157.96, 'CH'],\n ['F', 38215.9, 'Budget', 0, 0.97, 'Auto'], ['T', 13829.4, 'FreeLocal', 42, 176.61, 'CC'],\n ['F', 49745.3, 'Budget', 2.84, 27.28, 'CH'], ['F', 88427, 'Budget', 22.46, 69.97, 'CC'],\n ['F', 98003.7, 'FreeLocal', 1.03, 84.42, 'CC'], ['T', 89142.7, 'Budget', 3.76, 16.91, 'CC'],\n ['F', 74530.8, 'FreeLocal', 20.89, 127.89, 'Auto'], ['T', 30000, 'Budget', 45, 265.78, 'CC'],\n ['F', 76289.2, 'Budget', 22.2, 104.63, 'CC'], ['T', 66931.9, 'Budget', 11.72, 17.46, 'CC'],\n ['F', 9309.57, 'FreeLocal', 8.56, 108.3, 'CC'], ['T', 14085.5, 'FreeLocal', 29, 48.08, 'Auto'],\n ['T', 32962.6, 'Budget', 45, 168.28, 'CC'], ['T', 35000, 'Budget', 33, 65.79, 'CC'],\n ['T', 39000, 'Budget', 28, 41.78, 'Auto'], ['F', 77726.4, 'Budget', 14, 23.52, 'Auto'],\n ['T', 42000, 'FreeLocal', 25.77, 62.95, 'CC'], ['T', 2800.68, 'Budget', 28.45, 134.75, 'CC'],\n ['F', 90271.6, 'FreeLocal', 13.96, 110.4, 'CC'], ['F', 64816.6, 'Budget', 21, 27.87, 'CC'],\n ['F', 98217.1, 'FreeLocal', 29.49, 42.74, 'CC'], ['T', 2929.13, 'Budget', 14, 102.23, 'CH'],\n ['F', 41876.6, 'FreeLocal', 6.78, 139.44, 'CC'], ['T', 96223.4, 'FreeLocal', 11.81, 18.18, 'CC'],\n ['T', 15989.3, 'Budget', 3.67, 29.17, 'CC'], ['T', 69168.4, 'Budget', 14.16, 234.91, 'CC'],\n ['F', 92148.5, 'Budget', 7, 113.68, 'CC'], ['F', 96681, 'Budget', 8, 73.76, 'CC'],\n ['F', 62705.9, 'FreeLocal', 9, 33.44, 'CC'], ['F', 80221.2, 'FreeLocal', 7, 50.48, 'Auto'],\n ['F', 84479.2, 'FreeLocal', 2, 56.23, 'CC'], ['F', 64977.4, 'FreeLocal', 28.11, 45.77, 'CC'],\n ['T', 77994, 'FreeLocal', 12.4, 102.02, 'CH'], ['F', 90103.7, 'Budget', 12.23, 66.45, 'CC'],\n ['T', 59008.4, 'Budget', 12.86, 31.59, 'CC'], ['F', 5265.35, 'Budget', 2.33, 31.1, 'Auto'],\n ['T', 84978.1, 'FreeLocal', 5.03, 88.79, 'CH'], ['F', 36647.9, 'Budget', 21.41, 107.38, 'CC'],\n ['T', 64319.2, 'Budget', 3.01, 40.16, 'CH'], ['F', 73338, 'Budget', 20.92, 29.93, 'Auto'],\n ['T', 433.74, 'FreeLocal', 3.3, 44.22, 'CC'], ['F', 16962.2, 'Budget', 18.6, 27.57, 'CC'],\n ['F', 10708.3, 'Budget', 20.83, 142.95, 'CH'], ['T', 2031.61, 'Budget', 21.64, 109.04, 'CC'],\n ['F', 16938.5, 'FreeLocal', 13.35, 22.11, 'CH'], ['F', 55221, 'FreeLocal', 0.49, 15.69, 'CC'],\n ['F', 8073.11, 'FreeLocal', 28.7, 89.05, 'Auto'], ['F', 95448.6, 'Budget', 24.24, 29.46, 'CH'],\n ['T', 24141.5, 'FreeLocal', 28.82, 125.87, 'CC'], ['F', 63152.6, 'Budget', 29.93, 70.01, 'CC'],\n ['F', 31952, 'Budget', 0, 4.87, 'CC'], ['F', 72084.7, 'Budget', 29.11, 38.13, 'CC'],\n ['F', 42760.5, 'Budget', 13.47, 53.7, 'CC'], ['F', 49072, 'Budget', 23.5, 34.25, 'Auto'],\n ['F', 27371.8, 'FreeLocal', 16.14, 142.7, 'CC'], ['T', 71472.9, 'Budget', 16.02, 130.22, 'CH'],\n ['F', 95405.7, 'Budget', 7.74, 13.96, 'CC'], ['F', 95786.8, 'Budget', 21.33, 108.79, 'CC'],\n ['T', 90321.6, 'FreeLocal', 0.87, 12.39, 'CH'], ['T', 90478.6, 'FreeLocal', 18.02, 154.49, 'CC'],\n ['F', 56187, 'Budget', 8.09, 21.83, 'CH'], ['T', 35089, 'Budget', 23.56, 229.64, 'CC'],\n ['F', 9780.66, 'FreeLocal', 2.8, 21.39, 'CC'], ['F', 53010.8, 'FreeLocal', 12.45, 58.87, 'CC'],\n ['F', 75004.5, 'Budget', 26.52, 58.72, 'CC'], ['F', 19749.3, 'Budget', 20.22, 34.17, 'CC'],\n ['F', 57626.9, 'Budget', 9.38, 48.35, 'CC'], ['F', 20078, 'Budget', 9.65, 15.98, 'CC'],\n ['F', 47902, 'FreeLocal', 17.44, 72.31, 'Auto'], ['T', 7545.96, 'Budget', 22.39, 200.75, 'CC'],\n ['T', 89459.9, 'FreeLocal', 11.54, 36.05, 'CC'], ['T', 13576.5, 'Budget', 14.83, 40.49, 'CC'],\n ['F', 42031.8, 'Budget', 20.45, 59.78, 'CH'], ['T', 43634.5, 'Budget', 29.44, 143.5, 'CC'],\n ['T', 13109.1, 'Budget', 22.38, 62.87, 'Auto'], ['T', 92647.5, 'Budget', 16.04, 32.13, 'CC'],\n ['F', 21021.6, 'Budget', 3, 14.95, 'CC'], ['T', 74460.7, 'FreeLocal', 25.53, 206.46, 'CC'],\n ['T', 28787.4, 'Budget', 27.97, 86.06, 'Auto'], ['F', 13091.6, 'Budget', 22.79, 43.06, 'CC'],\n ['F', 62061.8, 'FreeLocal', 29.86, 82.08, 'Auto'], ['T', 20550.9, 'Budget', 27.72, 85.64, 'CC'],\n ['F', 1765.41, 'FreeLocal', 3.04, 47.99, 'CC'], ['T', 19131.1, 'Budget', 22.15, 57.07, 'Auto'],\n ['F', 47870.8, 'FreeLocal', 0, 13.82, 'CC'], ['F', 6440.46, 'Budget', 22.66, 49.86, 'CH'],\n ['F', 28766.9, 'Budget', 6.11, 64.2, 'CC'], ['F', 5252.29, 'Budget', 2.65, 19.73, 'Auto'],\n ['F', 91272.2, 'FreeLocal', 26.99, 40, 'CC'], ['F', 73228.3, 'Budget', 22.47, 50.58, 'Auto'],\n ['T', 64792.3, 'FreeLocal', 13.05, 51.41, 'CH'], ['T', 93322.1, 'Budget', 29.92, 38.72, 'CH'],\n ['F', 49910.7, 'Budget', 27.42, 51.14, 'CC'], ['T', 76161.4, 'FreeLocal', 11.96, 37.55, 'CC'],\n ['F', 55860, 'FreeLocal', 16.01, 26.37, 'CC'], ['F', 57360.8, 'FreeLocal', 10.36, 67.61, 'CC'],\n ['T', 92414.7, 'FreeLocal', 29.43, 40.06, 'CC'], ['T', 14578.8, 'Budget', 11.91, 107.02, 'Auto'],\n ['F', 87578.2, 'Budget', 0.29, 22.44, 'CC'], ['F', 86695.4, 'FreeLocal', 25.94, 58.03, 'CC'],\n ['F', 83287, 'FreeLocal', 29.64, 119.82, 'Auto'], ['F', 2067.82, 'Budget', 15.25, 85.9, 'CC'],\n ['F', 30665.2, 'FreeLocal', 5.83, 77.44, 'Auto'], ['F', 83287, 'FreeLocal', 6.08, 37.04, 'Auto'],\n ['F', 98680.4, 'FreeLocal', 17.58, 26.44, 'CH'], ['T', 65619.7, 'Budget', 13.56, 158.22, 'CC'],\n ['F', 95620.3, 'Budget', 10.91, 104.53, 'CC'], ['F', 85275, 'FreeLocal', 22.48, 174.09, 'Auto'],\n ['F', 66921.4, 'FreeLocal', 15.7, 24.67, 'CC'], ['F', 98453.6, 'FreeLocal', 13.72, 25.38, 'Auto'],\n ['F', 57420, 'Budget', 25.18, 277.72, 'Auto'], ['T', 66000, 'FreeLocal', 3.93, 34.35, 'CH'],\n ['F', 47639.1, 'Budget', 17.48, 57.11, 'CC'], ['T', 39461, 'FreeLocal', 22.87, 126.68, 'CC'],\n ['F', 47371, 'Budget', 4.98, 270.97, 'CC'], ['T', 16432.1, 'Budget', 20.41, 109.78, 'CH'],\n ['T', 540.4, 'Budget', 12.34, 20.1, 'Auto'], ['F', 80087.7, 'FreeLocal', 8.74, 31.56, 'CC'],\n ['F', 59691.3, 'Budget', 21.94, 278.65, 'CC'], ['T', 11251.1, 'FreeLocal', 28.42, 141.91, 'CC'],\n ['F', 93559.1, 'Budget', 1.52, 31.42, 'CC'], ['T', 3416.62, 'Budget', 18.97, 123.7, 'CC'],\n ['F', 93454.3, 'FreeLocal', 18.94, 44.13, 'Auto'], ['T', 5745, 'FreeLocal', 26.4, 44.11, 'CC'],\n ['F', 60095.2, 'Budget', 1.71, 117.85, 'Auto'], ['T', 6946.07, 'FreeLocal', 33, 34.61, 'CH'],\n ['F', 11234.7, 'Budget', 0.69, 113.42, 'CC'], ['F', 12387.6, 'FreeLocal', 0, 93.85, 'Auto'],\n ['F', 82931.3, 'FreeLocal', 19.24, 137.25, 'Auto'], ['F', 57483.9, 'Budget', 17.01, 44.3, 'CH'],\n ['T', 21274, 'FreeLocal', 10.87, 43.31, 'Auto'], ['F', 28267, 'FreeLocal', 21.87, 214.41, 'CC'],\n ['F', 36725.1, 'Budget', 8.65, 94.88, 'CH'], ['T', 94188.3, 'Budget', 20.86, 41.51, 'CC'],\n ['F', 91861, 'Budget', 15.32, 22.06, 'CC'], ['T', 12374.9, 'FreeLocal', 17.49, 123.59, 'Auto'],\n ['T', 69133.9, 'FreeLocal', 8.58, 46.32, 'CH'], ['F', 84948, 'FreeLocal', 11.14, 23.73, 'CH'],\n ['F', 30998.8, 'Budget', 2.4, 52.91, 'Auto'], ['F', 15924.2, 'FreeLocal', 0, 1.46, 'CH'],\n ['F', 21416.5, 'FreeLocal', 9.9, 27.61, 'CC'], ['F', 78554.2, 'Budget', 5.59, 35.88, 'Auto'],\n ['F', 38215.9, 'Budget', 0, 0.97, 'Auto'], ['T', 13829.4, 'FreeLocal', 35, 176.61, 'CC'],\n ['F', 49745.3, 'Budget', 2.84, 27.28, 'CH'], ['F', 88427, 'Budget', 22.46, 69.97, 'CC'],\n ['F', 98003.7, 'FreeLocal', 1.03, 84.42, 'CC'], ['T', 89142.7, 'Budget', 3.76, 16.91, 'CC'],\n ['F', 74530.8, 'FreeLocal', 20.89, 127.89, 'Auto'], ['T', 38000, 'Budget', 39, 265.78, 'CC'],\n ['F', 76289.2, 'Budget', 22.2, 104.63, 'CC'], ['T', 66931.9, 'Budget', 11.72, 17.46, 'CC'],\n ['F', 9309.57, 'FreeLocal', 8.56, 108.3, 'CC'], ['T', 32962.6, 'FreeLocal', 59, 48.08, 'Auto'],\n ['T', 42000, 'Budget', 43, 168.28, 'CC'], ['T', 43000, 'Budget', 42, 65.79, 'CC'],\n ['T', 42000, 'Budget', 45, 41.78, 'Auto'], ['F', 77726.4, 'Budget', 14, 23.52, 'Auto'],\n ['T', 37000, 'FreeLocal', 29, 62.95, 'CC'], ['T', 2800.68, 'Budget', 28.45, 134.75, 'CC'],\n ['F', 90271.6, 'FreeLocal', 13.96, 110.4, 'CC'], ['F', 64816.6, 'Budget', 21, 27.87, 'CC'],\n ['F', 98217.1, 'FreeLocal', 29.49, 42.74, 'CC'], ['T', 15989.3, 'Budget', 3.67, 29.17, 'CC'],\n ['F', 92148.5, 'Budget', 4, 113.68, 'CC'], ['F', 96681, 'Budget', 5, 73.76, 'CC'],\n ['F', 62705.9, 'FreeLocal', 7, 33.44, 'CC'], ['F', 80221.2, 'FreeLocal', 0.91, 50.48, 'Auto'],\n ['F', 84479.2, 'FreeLocal', 9, 56.23, 'CC'], ['T', 84978.1, 'FreeLocal', 5.03, 88.79, 'CH'],\n ['T', 36647.9, 'Budget', 21.41, 107.38, 'CC'], ['T', 64319.2, 'Budget', 3.01, 40.16, 'CH'],\n ['F', 73338, 'Budget', 20.92, 29.93, 'Auto'], ['T', 433.74, 'FreeLocal', 3.3, 44.22, 'CC'],\n ['F', 16962.2, 'Budget', 18.6, 27.57, 'CC'], ['F', 10708.3, 'Budget', 20.83, 142.95, 'CH'],\n ['T', 2031.61, 'Budget', 21.64, 109.04, 'CC'], ['F', 16938.5, 'FreeLocal', 13.35, 22.11, 'CH'],\n ['F', 55221, 'FreeLocal', 0.49, 15.69, 'CC'], ['F', 8073.11, 'FreeLocal', 28.7, 89.05, 'Auto'],\n ['F', 95448.6, 'Budget', 24.24, 29.46, 'CH'], ['T', 24141.5, 'FreeLocal', 28.82, 125.87, 'CC'],\n ['F', 63152.6, 'Budget', 29.93, 70.01, 'CC'], ['F', 72084.7, 'Budget', 29.11, 38.13, 'CC'],\n ['F', 42760.5, 'Budget', 13.47, 53.7, 'CC'], ['F', 49072, 'Budget', 23.5, 34.25, 'Auto'],\n ['F', 27371.8, 'FreeLocal', 16.14, 142.7, 'CC'], ['T', 71472.9, 'Budget', 16.02, 130.22, 'CH'],\n ['F', 95405.7, 'Budget', 7.74, 13.96, 'CC'], ['F', 95786.8, 'Budget', 21.33, 108.79, 'CC'],\n ['T', 90321.6, 'FreeLocal', 0.87, 12.39, 'CH'], ['T', 90478.6, 'FreeLocal', 18.02, 154.49, 'CC'],\n ['F', 56187, 'Budget', 8.09, 21.83, 'CH'], ['T', 32098, 'Budget', 23.56, 229.64, 'CC'],\n ['F', 53010.8, 'FreeLocal', 12.45, 58.87, 'CC'], ['F', 75004.5, 'Budget', 26.52, 58.72, 'CC'],\n ['F', 19749.3, 'Budget', 20.22, 34.17, 'CC'], ['F', 57626.9, 'Budget', 9.38, 48.35, 'CC'],\n ['F', 20078, 'Budget', 9.65, 15.98, 'CC'], ['F', 47902, 'FreeLocal', 17.44, 72.31, 'Auto'],\n ['T', 7545.96, 'Budget', 22.39, 200.75, 'CC'], ['T', 89459.9, 'FreeLocal', 11.54, 36.05, 'CC'],\n ['T', 13576.5, 'Budget', 14.83, 40.49, 'CC'], ['F', 42031.8, 'Budget', 20.45, 59.78, 'CH'],\n ['T', 43634.5, 'Budget', 29.44, 143.5, 'CC'], ['T', 13109.1, 'Budget', 22.38, 62.87, 'Auto'],\n ['T', 92647.5, 'Budget', 16.04, 32.13, 'CC'], ['T', 21021.6, 'Budget', 3.75, 14.95, 'CC'],\n ['T', 74460.7, 'FreeLocal', 25.53, 206.46, 'CC'], ['T', 28787.4, 'Budget', 27.97, 86.06, 'Auto'],\n ['F', 13091.6, 'Budget', 22.79, 43.06, 'CC'], ['F', 62061.8, 'FreeLocal', 29.86, 82.08, 'Auto'],\n ['T', 20550.9, 'Budget', 27.72, 85.64, 'CC'], ['F', 1765.41, 'FreeLocal', 3.04, 47.99, 'CC'],\n ['T', 19131.1, 'Budget', 22.15, 57.07, 'Auto'], ['T', 43634.5, 'Budget', 29.44, 143.5, 'CC'],\n ['T', 13109.1, 'Budget', 22.38, 62.87, 'Auto'], ['T', 92647.5, 'Budget', 16.04, 32.13, 'CC'],\n ['T', 21021.6, 'Budget', 3.75, 14.95, 'CC'], ['T', 74460.7, 'FreeLocal', 25.53, 206.46, 'CC'],\n ['T', 28787.4, 'Budget', 27.97, 86.06, 'Auto'], ['F', 13091.6, 'Budget', 22.79, 43.06, 'CC'],\n ['F', 62061.8, 'FreeLocal', 29.86, 82.08, 'Auto'], ['T', 20550.9, 'Budget', 27.72, 85.64, 'CC'],\n ['F', 1765.41, 'FreeLocal', 3.04, 47.99, 'CC'], ['T', 19131.1, 'Budget', 22.15, 57.07, 'Auto'],\n ['F', 6440.46, 'Budget', 22.66, 49.86, 'CH'], ['F', 63900.9, 'Budget', 8.36, 47.4, 'CC'],\n ['F', 28766.9, 'Budget', 6.11, 64.2, 'CC'], ['F', 72928.2, 'Budget', 7.45, 203.67, 'CC'],\n ['F', 91272.2, 'FreeLocal', 26.99, 40, 'CC'], ['F', 73228.3, 'Budget', 22.47, 50.58, 'Auto'],\n ['T', 64792.3, 'FreeLocal', 13.05, 51.41, 'CH'], ['T', 93322.1, 'Budget', 29.92, 38.72, 'CH'],\n ['F', 49910.7, 'Budget', 27.42, 51.14, 'CC'], ['T', 76161.4, 'FreeLocal', 11.96, 37.55, 'CC'],\n ['F', 55860, 'FreeLocal', 16.01, 26.37, 'CC'], ['F', 57360.8, 'FreeLocal', 10.36, 67.61, 'CC'],\n ['T', 92414.7, 'FreeLocal', 29.43, 40.06, 'CC'], ['T', 14578.8, 'Budget', 11.91, 107.02, 'Auto'],\n ['F', 87578.2, 'Budget', 0.29, 22.44, 'CC'], ['F', 86695.4, 'FreeLocal', 25.94, 58.03, 'CC'],\n ['F', 77000, 'FreeLocal', 29.64, 119.82, 'Auto'], ['F', 2067.82, 'Budget', 15.25, 85.9, 'CC'],\n ['F', 30665.2, 'FreeLocal', 5.83, 77.44, 'Auto'], ['F', 83287, 'FreeLocal', 6.08, 37.04, 'Auto'],\n ['F', 98680.4, 'FreeLocal', 17.58, 26.44, 'CH'], ['T', 65619.7, 'Budget', 13.56, 158.22, 'CC'],\n ['F', 95620.3, 'Budget', 10.91, 104.53, 'CC'], ['F', 85275, 'FreeLocal', 22.48, 174.09, 'Auto'],\n ['F', 66921.4, 'FreeLocal', 15.7, 24.67, 'CC'], ['F', 98453.6, 'FreeLocal', 13.72, 25.38, 'Auto'],\n ['F', 57420, 'Budget', 25.18, 277.72, 'Auto'], ['T', 70000, 'FreeLocal', 3.93, 34.35, 'CH'],\n ['F', 47639.1, 'Budget', 17.48, 57.11, 'CC'], ['T', 39461, 'FreeLocal', 22.87, 126.68, 'CC'],\n ['F', 47371, 'Budget', 4.98, 270.97, 'CC'], ['F', 89813.6, 'FreeLocal', 14.94, 166.18, 'CC'],\n ['T', 16432.1, 'Budget', 20.41, 109.78, 'CH'], ['T', 540.4, 'Budget', 12.34, 20.1, 'Auto'],\n ['F', 80087.7, 'FreeLocal', 8.74, 31.56, 'CC'], ['F', 59691.3, 'Budget', 21.94, 278.65, 'CC'],\n ['T', 11251.1, 'FreeLocal', 28.42, 141.91, 'CC'], ['F', 93559.1, 'Budget', 1.52, 31.42, 'CC'],\n ['T', 3416.62, 'Budget', 18.97, 123.7, 'CC'], ['F', 93454.3, 'FreeLocal', 18.94, 44.13, 'Auto'],\n ['T', 5745, 'FreeLocal', 26.4, 44.11, 'CC'], ['T', 13829.4, 'FreeLocal', 45, 34.61, 'CH'],\n ['F', 11234.7, 'Budget', 0.69, 113.42, 'CC'], ['F', 82931.3, 'FreeLocal', 19.24, 137.25, 'Auto'],\n ['F', 57483.9, 'Budget', 17.01, 44.3, 'CH'], ['T', 21274, 'FreeLocal', 10.87, 43.31, 'Auto'],\n ['F', 28267, 'FreeLocal', 21.87, 214.41, 'CC'], ['F', 36725.1, 'Budget', 8.65, 94.88, 'CH'],\n ['T', 94188.3, 'Budget', 20.86, 41.51, 'CC'], ['F', 91861, 'Budget', 15.32, 22.06, 'CC'],\n ['T', 12374.9, 'FreeLocal', 17.49, 123.59, 'Auto'], ['F', 69133.9, 'FreeLocal', 8.58, 46.32, 'CH'],\n ['F', 84948, 'FreeLocal', 11.14, 23.73, 'CH'], ['F', 30998.8, 'Budget', 2.4, 52.91, 'Auto'],\n ['F', 21416.5, 'FreeLocal', 9.9, 27.61, 'CC'], ['F', 78554.2, 'Budget', 5.59, 35.88, 'Auto'],\n ['F', 38215.9, 'Budget', 0, 0.97, 'Auto'], ['T', 30000, 'FreeLocal', 33, 176.61, 'CC'],\n ['F', 49745.3, 'Budget', 2.84, 27.28, 'CH'], ['F', 88427, 'Budget', 22.46, 69.97, 'CC'],\n ['F', 98003.7, 'FreeLocal', 1.03, 84.42, 'CC'], ['T', 89142.7, 'Budget', 3.76, 16.91, 'CC'],\n ['F', 74530.8, 'FreeLocal', 20.89, 127.89, 'Auto'], ['T', 41000, 'Budget', 28, 265.78, 'CC'],\n ['F', 76289.2, 'Budget', 22.2, 104.63, 'CC'], ['T', 66931.9, 'Budget', 11.72, 17.46, 'CC'],\n ['F', 9309.57, 'FreeLocal', 8.56, 108.3, 'CC'], ['T', 32962.6, 'FreeLocal', 25.77, 48.08, 'Auto'],\n ['T', 42000, 'Budget', 39, 168.28, 'CC'], ['T', 39000, 'Budget', 59, 65.79, 'CC'],\n ['T', 42000, 'Budget', 43, 41.78, 'Auto'], ['F', 77726.4, 'Budget', 14, 23.52, 'Auto'],\n ['T', 35089, 'FreeLocal', 42, 62.95, 'CC'], ['T', 2800.68, 'Budget', 28.45, 134.75, 'CC'],\n ['F', 90271.6, 'FreeLocal', 13.96, 110.4, 'CC'], ['F', 64816.6, 'Budget', 21, 27.87, 'CC'],\n ['F', 98217.1, 'FreeLocal', 29.49, 42.74, 'CC'], ['T', 15989.3, 'Budget', 3.67, 29.17, 'CC'],\n ['F', 84978.1, 'FreeLocal', 5.03, 88.79, 'CH'], ['F', 36647.9, 'Budget', 21.41, 107.38, 'CC'],\n ['T', 64319.2, 'Budget', 3.01, 40.16, 'CH'], ['T', 73338, 'Budget', 20.92, 29.93, 'Auto'],\n ['T', 433.74, 'FreeLocal', 3.3, 44.22, 'CC'], ['F', 16962.2, 'Budget', 18.6, 27.57, 'CC'],\n ['F', 10708.3, 'Budget', 20.83, 142.95, 'CH'], ['T', 2031.61, 'Budget', 21.64, 109.04, 'CC'],\n ['F', 16938.5, 'FreeLocal', 13.35, 22.11, 'CH'], ['F', 55221, 'FreeLocal', 0.49, 15.69, 'CC'],\n ['F', 8073.11, 'FreeLocal', 28.7, 89.05, 'Auto'], ['F', 95448.6, 'Budget', 24.24, 29.46, 'CH'],\n ['T', 24141.5, 'FreeLocal', 28.82, 125.87, 'CC'], ['F', 63152.6, 'Budget', 29.93, 70.01, 'CC'],\n ['F', 72084.7, 'Budget', 29.11, 38.13, 'CC'], ['F', 42760.5, 'Budget', 13.47, 53.7, 'CC'],\n ['F', 49072, 'Budget', 23.5, 34.25, 'Auto'], ['F', 27371.8, 'FreeLocal', 16.14, 142.7, 'CC'],\n ['T', 71472.9, 'Budget', 16.02, 130.22, 'CH'], ['F', 95405.7, 'Budget', 7.74, 13.96, 'CC'],\n ['F', 95786.8, 'Budget', 21.33, 108.79, 'CC'], ['T', 90321.6, 'FreeLocal', 0.87, 12.39, 'CC'],\n ['T', 90478.6, 'FreeLocal', 18.02, 154.49, 'CH'], ['F', 56187, 'Budget', 8.09, 21.83, 'CH'],\n ['T', 35000, 'Budget', 23.56, 229.64, 'CC'], ['F', 9780.66, 'FreeLocal', 2.8, 21.39, 'CC'],\n ['F', 53010.8, 'FreeLocal', 12.45, 58.87, 'CC'], ['F', 75004.5, 'Budget', 26.52, 58.72, 'CC'],\n ['F', 19749.3, 'Budget', 20.22, 34.17, 'CC'], ['F', 57626.9, 'Budget', 9.38, 48.35, 'CC'],\n ['F', 20078, 'Budget', 9.65, 15.98, 'CC'], ['F', 47902, 'FreeLocal', 17.44, 72.31, 'Auto'],\n ['T', 7545.96, 'Budget', 22.39, 200.75, 'CC'], ['T', 89459.9, 'FreeLocal', 11.54, 36.05, 'CC'],\n ['T', 13576.5, 'Budget', 14.83, 40.49, 'CC'], ['F', 42031.8, 'Budget', 20.45, 59.78, 'CH'],\n ['T', 43634.5, 'Budget', 29.44, 143.5, 'CC'], ['T', 13109.1, 'Budget', 22.38, 62.87, 'Auto'],\n ['T', 92647.5, 'Budget', 16.04, 32.13, 'CC'], ['T', 21021.6, 'Budget', 3.75, 14.95, 'CC'],\n ['T', 74460.7, 'FreeLocal', 25.53, 206.46, 'CC'], ['F', 43894.5, 'FreeLocal', 29.28, 69.67, 'CC'],\n ['T', 28787.4, 'Budget', 27.97, 86.06, 'Auto'], ['F', 94278.7, 'FreeLocal', 26.68, 36.35, 'CC'],\n ['F', 83900.2, 'FreeLocal', 28.21, 36.83, 'CC'], ['F', 13091.6, 'Budget', 22.79, 43.06, 'CC'],\n ['F', 91708.4, 'Budget', 17.21, 48.77, 'CH'], ['F', 64335, 'FreeLocal', 17, 154.34, 'CC'],\n ['F', 62061.8, 'FreeLocal', 29.86, 82.08, 'Auto'], ['T', 20550.9, 'Budget', 27.72, 85.64, 'CC'],\n ['F', 76142, 'FreeLocal', 28.42, 112.53, 'CC'], ['F', 46513.5, 'Budget', 17.06, 58.78, 'Auto'],\n ['F', 1765.41, 'FreeLocal', 3.04, 47.99, 'CC'], ['T', 19131.1, 'Budget', 22.15, 57.07, 'Auto'],\n ['F', 98716.3, 'FreeLocal', 20.97, 43.13, 'CC'], ['F', 38280, 'FreeLocal', 11.64, 86.61, 'Auto'],\n ['F', 6440.46, 'Budget', 22.66, 49.86, 'CH'], ['F', 63900.9, 'Budget', 8.36, 47.4, 'CC'],\n ['F', 28766.9, 'Budget', 6.11, 64.2, 'CC'], ['F', 56722.8, 'FreeLocal', 17.37, 74.77, 'CC'],\n ['F', 5252.29, 'Budget', 2.65, 19.73, 'Auto'], ['F', 78851.3, 'FreeLocal', 0.37, 29.04, 'CC'],\n ['F', 72928.2, 'Budget', 7.45, 203.67, 'CC'], ['F', 91272.2, 'FreeLocal', 26.99, 40, 'CC'],\n ['F', 83891.9, 'Budget', 28.92, 74.4, 'CH'], ['F', 3601.71, 'Budget', 9.57, 125.6, 'Auto'],\n ['F', 73228.3, 'Budget', 22.47, 50.58, 'Auto'], ['T', 64792.3, 'FreeLocal', 13.05, 51.41, 'CH'],\n ['T', 93322.1, 'Budget', 29.92, 38.72, 'CH'], ['F', 49910.7, 'Budget', 27.42, 51.14, 'CC'],\n ['T', 76161.4, 'FreeLocal', 11.96, 37.55, 'CC'], ['F', 55860, 'FreeLocal', 16.01, 26.37, 'CC'],\n ['F', 57360.8, 'FreeLocal', 10.36, 67.61, 'CC'], ['T', 92414.7, 'FreeLocal', 29.43, 40.06, 'CC'],\n ['T', 14578.8, 'Budget', 11.91, 107.02, 'Auto'], ['F', 87578.2, 'Budget', 0.29, 22.44, 'CC'],\n ['F', 86695.4, 'FreeLocal', 25.94, 58.03, 'CC'], ['F', 66666, 'FreeLocal', 29.64, 119.82, 'Auto'],\n ['F', 2067.82, 'Budget', 15.25, 85.9, 'CC'], ['F', 30665.2, 'FreeLocal', 5.83, 77.44, 'Auto'],\n ['F', 77000, 'FreeLocal', 6.08, 37.04, 'Auto'], ['F', 98680.4, 'FreeLocal', 17.58, 26.44, 'CH'],\n ['T', 65619.7, 'Budget', 13.56, 158.22, 'CC'], ['F', 95620.3, 'Budget', 10.91, 104.53, 'CC'],\n ['F', 85275, 'FreeLocal', 22.48, 174.09, 'Auto'], ['F', 66921.4, 'FreeLocal', 15.7, 24.67, 'CC'],\n ['F', 98453.6, 'FreeLocal', 13.72, 25.38, 'Auto'], ['F', 57420, 'Budget', 25.18, 277.72, 'Auto'],\n ['F', 58986.2, 'FreeLocal', 3.93, 34.35, 'CH'], ['F', 47639.1, 'Budget', 17.48, 57.11, 'CC'],\n ['T', 39461, 'FreeLocal', 22.87, 126.68, 'CC'], ['F', 47371, 'Budget', 4.98, 270.97, 'CC'],\n ['F', 89813.6, 'FreeLocal', 14.94, 166.18, 'CC'], ['T', 16432.1, 'Budget', 20.41, 109.78, 'CH'],\n ['T', 540.4, 'Budget', 12.34, 20.1, 'Auto'], ['F', 80087.7, 'FreeLocal', 8.74, 31.56, 'CC'],\n ['F', 59691.3, 'Budget', 21.94, 278.65, 'CC'], ['T', 11251.1, 'FreeLocal', 28.42, 141.91, 'CC'],\n ['F', 37626, 'Budget', 7.5, 87.12, 'CH'], ['T', 3416.62, 'Budget', 18.97, 123.7, 'CC'],\n ['F', 93454.3, 'FreeLocal', 18.94, 44.13, 'Auto'], ['T', 5745, 'FreeLocal', 26.4, 44.11, 'CC'],\n ['T', 13829.4, 'FreeLocal', 45, 34.61, 'CH'], ['F', 11234.7, 'Budget', 0.69, 113.42, 'CC'],\n ['F', 82931.3, 'FreeLocal', 19.24, 137.25, 'Auto'], ['F', 57483.9, 'Budget', 17.01, 44.3, 'CH'],\n ['T', 21274, 'FreeLocal', 10.87, 43.31, 'Auto'], ['F', 28267, 'FreeLocal', 21.87, 214.41, 'CC'],\n ['F', 36725.1, 'Budget', 8.65, 94.88, 'CH'], ['T', 94188.3, 'Budget', 20.86, 41.51, 'CC'],\n ['F', 91861, 'Budget', 15.32, 22.06, 'CC'], ['T', 12374.9, 'FreeLocal', 17.49, 123.59, 'Auto'],\n ['F', 69133.9, 'FreeLocal', 8.58, 46.32, 'CH'], ['F', 84948, 'FreeLocal', 11.14, 23.73, 'CH'],\n ['F', 30998.8, 'Budget', 2.4, 52.91, 'Auto'], ['F', 15924.2, 'FreeLocal', 0, 1.46, 'CH'],\n ['F', 21416.5, 'FreeLocal', 9.9, 27.61, 'CC'], ['F', 78554.2, 'Budget', 5.59, 35.88, 'Auto'],\n ['F', 38215.9, 'Budget', 0, 0.97, 'Auto'], ['T', 14085.5, 'FreeLocal', 29, 176.61, 'CC'],\n ['F', 49745.3, 'Budget', 2.84, 27.28, 'CH'], ['F', 88427, 'Budget', 22.46, 69.97, 'CC'],\n ['F', 98003.7, 'FreeLocal', 1.03, 84.42, 'CC'], ['F', 89142.7, 'Budget', 3.76, 16.91, 'CC'],\n ['F', 74530.8, 'FreeLocal', 20.89, 127.89, 'Auto'], ['T', 32962.6, 'Budget', 45, 265.78, 'CC'],\n ['F', 76289.2, 'Budget', 22.2, 104.63, 'CC'], ['T', 66931.9, 'Budget', 11.72, 17.46, 'CC'],\n ['F', 9309.57, 'FreeLocal', 8.56, 108.3, 'CC'], ['T', 42000, 'FreeLocal', 33, 48.08, 'Auto'],\n ['T', 43000, 'Budget', 28, 168.28, 'CC'], ['T', 42000, 'Budget', 25.77, 65.79, 'CC'],\n ['T', 32098, 'Budget', 38, 41.78, 'Auto'], ['F', 77726.4, 'Budget', 14, 23.52, 'Auto'],\n ['T', 35000, 'FreeLocal', 39, 62.95, 'CC'], ['T', 2800.68, 'Budget', 28.45, 134.75, 'CC'],\n ['F', 90271.6, 'FreeLocal', 13.96, 110.4, 'CC'], ['F', 64816.6, 'Budget', 21, 27.87, 'CC'],\n ['F', 98217.1, 'FreeLocal', 29.49, 42.74, 'CC'], ['T', 15989.3, 'Budget', 3.67, 29.17, 'CC'],\n ['F', 84978.1, 'FreeLocal', 5.03, 88.79, 'CH'], ['T', 36647.9, 'Budget', 21.41, 107.38, 'CC'],\n ['T', 64319.2, 'Budget', 3.01, 40.16, 'CH'], ['F', 73338, 'Budget', 20.92, 29.93, 'Auto'],\n ['T', 433.74, 'FreeLocal', 3.3, 44.22, 'CC'], ['F', 16962.2, 'Budget', 18.6, 27.57, 'CC'],\n ['F', 10708.3, 'Budget', 20.83, 142.95, 'CH'], ['T', 2031.61, 'Budget', 21.64, 109.04, 'CC'],\n ['F', 16938.5, 'FreeLocal', 13.35, 22.11, 'CH'], ['F', 55221, 'FreeLocal', 0.49, 15.69, 'CC'],\n ['F', 8073.11, 'FreeLocal', 28.7, 89.05, 'Auto'], ['F', 95448.6, 'Budget', 24.24, 29.46, 'CH'],\n ['T', 24141.5, 'FreeLocal', 28.82, 125.87, 'CC'], ['F', 63152.6, 'Budget', 29.93, 70.01, 'CC'],\n ['F', 72084.7, 'Budget', 29.11, 38.13, 'CC'], ['F', 42760.5, 'Budget', 13.47, 53.7, 'CC'],\n ['F', 49072, 'Budget', 23.5, 34.25, 'Auto'], ['F', 27371.8, 'FreeLocal', 16.14, 142.7, 'CC'],\n ['T', 71472.9, 'Budget', 16.02, 130.22, 'CH'], ['F', 95405.7, 'Budget', 7.74, 13.96, 'CC'],\n ['F', 95786.8, 'Budget', 21.33, 108.79, 'CC'], ['T', 90321.6, 'FreeLocal', 0.87, 12.39, 'CC'],\n ['T', 90478.6, 'FreeLocal', 18.02, 154.49, 'CC'], ['F', 56187, 'Budget', 8.09, 21.83, 'CH'],\n ['T', 38000, 'Budget', 23.56, 229.64, 'CC'], ['F', 53010.8, 'FreeLocal', 12.45, 58.87, 'CC'],\n ['F', 75004.5, 'Budget', 26.52, 58.72, 'CC'], ['F', 19749.3, 'Budget', 20.22, 34.17, 'CC'],\n ['F', 57626.9, 'Budget', 9.38, 48.35, 'CC'], ['F', 20078, 'Budget', 9.65, 15.98, 'CC'],\n ['F', 47902, 'FreeLocal', 17.44, 72.31, 'Auto'], ['T', 7545.96, 'Budget', 22.39, 200.75, 'CC'],\n ['T', 89459.9, 'FreeLocal', 11.54, 36.05, 'CC'], ['T', 37000, 'Budget', 23.56, 229.64, 'CC'],\n ['F', 9780.66, 'FreeLocal', 2.8, 21.39, 'CC'], ['F', 53010.8, 'FreeLocal', 12.45, 58.87, 'CC'],\n ['F', 75004.5, 'Budget', 26.52, 58.72, 'CC'], ['F', 19749.3, 'Budget', 20.22, 34.17, 'CC'],\n ['F', 57626.9, 'Budget', 9.38, 48.35, 'CC'], ['F', 20078, 'Budget', 9.65, 15.98, 'CC'],\n ['F', 47902, 'FreeLocal', 17.44, 72.31, 'Auto'], ['T', 7545.96, 'Budget', 22.39, 200.75, 'CC'],\n ['T', 89459.9, 'FreeLocal', 11.54, 36.05, 'CC'], ['T', 13576.5, 'Budget', 14.83, 40.49, 'CC'],\n ['F', 42031.8, 'Budget', 20.45, 59.78, 'CH'], ['T', 97689.2, 'FreeLocal', 6.08, 14.87, 'CC'],\n ['T', 75397.8, 'FreeLocal', 24.42, 60.32, 'CC'], ['T', 49453.8, 'Budget', 17.13, 29.46, 'CC'],\n ['T', 92881.8, 'FreeLocal', 2.15, 93.57, 'CC'], ['T', 43634.5, 'Budget', 29.44, 143.5, 'CC'],\n ['T', 68641.5, 'FreeLocal', 5.1, 55.32, 'CC'], ['T', 50735.1, 'Budget', 11.62, 28.38, 'CC'],\n ['T', 52490.1, 'FreeLocal', 10.1, 29.62, 'CC'], ['T', 13109.1, 'Budget', 22.38, 62.87, 'Auto'],\n ['T', 92647.5, 'Budget', 16.04, 32.13, 'CC'], ['T', 21021.6, 'Budget', 3.75, 14.95, 'CC'],\n ['T', 74460.7, 'FreeLocal', 25.53, 206.46, 'CC'], ['T', 43894.5, 'FreeLocal', 29.28, 69.67, 'CC'],\n ['T', 28787.4, 'Budget', 27.97, 86.06, 'Auto'], ['T', 94278.7, 'FreeLocal', 26.68, 36.35, 'CC'],\n ['T', 83900.2, 'FreeLocal', 28.21, 36.83, 'CC'], ['F', 13091.6, 'Budget', 22.79, 43.06, 'CC'],\n ['T', 91708.4, 'Budget', 17.21, 48.77, 'CH'], ['F', 62061.8, 'FreeLocal', 29.86, 82.08, 'Auto'],\n ['T', 20550.9, 'Budget', 27.72, 85.64, 'CC'], ['F', 1765.41, 'FreeLocal', 3.04, 47.99, 'CC'],\n ['T', 19131.1, 'Budget', 22.15, 57.07, 'Auto'], ['F', 6440.46, 'Budget', 22.66, 49.86, 'CH'],\n ['F', 28766.9, 'Budget', 6.11, 64.2, 'CC'], ['F', 91272.2, 'FreeLocal', 26.99, 40, 'CC'],\n ['F', 73228.3, 'Budget', 22.47, 50.58, 'Auto'], ['T', 64792.3, 'FreeLocal', 13.05, 51.41, 'CH'],\n ['T', 93322.1, 'Budget', 29.92, 38.72, 'CH'], ['F', 49910.7, 'Budget', 27.42, 51.14, 'CC'],\n ['T', 76161.4, 'FreeLocal', 11.96, 37.55, 'CC'], ['F', 55860, 'FreeLocal', 16.01, 26.37, 'CC'],\n ['F', 57360.8, 'FreeLocal', 10.36, 67.61, 'CC'], ['T', 92414.7, 'FreeLocal', 29.43, 40.06, 'CC'],\n ['T', 14578.8, 'Budget', 11.91, 107.02, 'Auto'], ['F', 87578.2, 'Budget', 0.29, 22.44, 'CC'],\n ['F', 86695.4, 'FreeLocal', 25.94, 58.03, 'CC'], ['F', 68000, 'FreeLocal', 29.64, 119.82, 'Auto'],\n ['F', 2067.82, 'Budget', 15.25, 85.9, 'CC'], ['F', 30665.2, 'FreeLocal', 5.83, 77.44, 'Auto'],\n ['F', 80000, 'FreeLocal', 6.08, 37.04, 'Auto'], ['F', 98680.4, 'FreeLocal', 17.58, 26.44, 'CH'],\n ['F', 65619.7, 'Budget', 13.56, 158.22, 'CC'], ['F', 95620.3, 'Budget', 10.91, 104.53, 'CC'],\n ['F', 85275, 'FreeLocal', 22.48, 174.09, 'Auto'], ['F', 66921.4, 'FreeLocal', 15.7, 24.67, 'CC'],\n ['F', 98453.6, 'FreeLocal', 13.72, 25.38, 'Auto'], ['F', 57420, 'Budget', 25.18, 277.72, 'Auto'],\n ['F', 58986.2, 'FreeLocal', 3.93, 34.35, 'CH'], ['F', 47639.1, 'Budget', 17.48, 57.11, 'CC'],\n ['T', 39461, 'FreeLocal', 22.87, 126.68, 'CC'], ['F', 47371, 'Budget', 4.98, 270.97, 'CC'],\n ['F', 89813.6, 'FreeLocal', 14.94, 166.18, 'CC'], ['T', 16432.1, 'Budget', 20.41, 109.78, 'CH'],\n ['T', 540.4, 'Budget', 12.34, 20.1, 'Auto'], ['F', 80087.7, 'FreeLocal', 8.74, 31.56, 'CC'],\n ['F', 59691.3, 'Budget', 21.94, 278.65, 'CC'], ['T', 11251.1, 'FreeLocal', 28.42, 141.91, 'CC'],\n ['T', 3416.62, 'Budget', 18.97, 123.7, 'CC'], ['F', 93454.3, 'FreeLocal', 18.94, 44.13, 'Auto'],\n ['T', 5745, 'FreeLocal', 26.4, 44.11, 'CC'], ['T', 30000, 'FreeLocal', 59, 34.61, 'CH'],\n ['F', 11234.7, 'Budget', 0.69, 113.42, 'CC'], ['F', 82931.3, 'FreeLocal', 19.24, 137.25, 'Auto'],\n ['F', 57483.9, 'Budget', 17.01, 44.3, 'CH'], ['T', 21274, 'FreeLocal', 10.87, 43.31, 'Auto'],\n ['F', 28267, 'FreeLocal', 21.87, 214.41, 'CC'], ['F', 36725.1, 'Budget', 8.65, 94.88, 'CH'],\n ['T', 94188.3, 'Budget', 20.86, 41.51, 'CC'], ['F', 91861, 'Budget', 15.32, 22.06, 'CC'],\n ['T', 12374.9, 'FreeLocal', 17.49, 123.59, 'Auto'], ['F', 69133.9, 'FreeLocal', 8.58, 46.32, 'CH'],\n ['F', 84948, 'FreeLocal', 11.14, 23.73, 'CH'], ['F', 30998.8, 'Budget', 2.4, 52.91, 'Auto'],\n ['F', 15924.2, 'FreeLocal', 0, 1.46, 'CH'], ['F', 21416.5, 'FreeLocal', 9.9, 27.61, 'CC'],\n ['F', 78554.2, 'Budget', 5.59, 35.88, 'Auto'], ['F', 38215.9, 'Budget', 0, 0.97, 'Auto'],\n ['T', 14085.5, 'FreeLocal', 43, 176.61, 'CC'], ['F', 49745.3, 'Budget', 2.84, 27.28, 'CH'],\n ['F', 88427, 'Budget', 22.46, 69.97, 'CC'], ['F', 98003.7, 'FreeLocal', 1.03, 84.42, 'CC'],\n ['T', 89142.7, 'Budget', 3.76, 16.91, 'CC'], ['F', 74530.8, 'FreeLocal', 20.89, 127.89, 'Auto'],\n ['T', 32962.6, 'Budget', 42, 265.78, 'CC'], ['F', 76289.2, 'Budget', 22.2, 104.63, 'CC'],\n ['T', 66931.9, 'Budget', 11.72, 17.46, 'CC'], ['F', 9309.57, 'FreeLocal', 8.56, 108.3, 'CC'],\n ['T', 28000, 'FreeLocal', 45, 48.08, 'Auto'], ['T', 38000, 'Budget', 29, 168.28, 'CC'],\n ['T', 32962.6, 'Budget', 45, 65.79, 'CC'], ['T', 42000, 'Budget', 33, 41.78, 'Auto'],\n ['F', 77726.4, 'Budget', 14, 23.52, 'Auto'], ['T', 43000, 'FreeLocal', 28, 62.95, 'CC'],\n ['T', 2800.68, 'Budget', 28.45, 134.75, 'CC'], ['F', 90271.6, 'FreeLocal', 13.96, 110.4, 'CC'],\n ['F', 64816.6, 'Budget', 21, 27.87, 'CC'], ['F', 98217.1, 'FreeLocal', 29.49, 42.74, 'CC'],\n ['T', 15989.3, 'Budget', 3.67, 29.17, 'CC'], ['F', 84978.1, 'FreeLocal', 5.03, 88.79, 'CH'],\n ['F', 36647.9, 'Budget', 21.41, 107.38, 'CC'], ['T', 64319.2, 'Budget', 3.01, 40.16, 'CH'],\n ['F', 73338, 'Budget', 20.92, 29.93, 'Auto'], ['T', 433.74, 'FreeLocal', 3.3, 44.22, 'CC'],\n ['F', 16962.2, 'Budget', 18.6, 27.57, 'CC'], ['F', 10708.3, 'Budget', 20.83, 142.95, 'CH'],\n ['T', 2031.61, 'Budget', 21.64, 109.04, 'CC'], ['F', 16938.5, 'FreeLocal', 13.35, 22.11, 'CH'],\n ['F', 55221, 'FreeLocal', 0.49, 15.69, 'CC'], ['F', 8073.11, 'FreeLocal', 28.7, 89.05, 'Auto'],\n ['F', 95448.6, 'Budget', 24.24, 29.46, 'CH'], ['T', 24141.5, 'FreeLocal', 28.82, 125.87, 'CC'],\n ['F', 63152.6, 'Budget', 29.93, 70.01, 'CC'], ['F', 72084.7, 'Budget', 29.11, 38.13, 'CC'],\n ['F', 42760.5, 'Budget', 13.47, 53.7, 'CC'], ['F', 49072, 'Budget', 23.5, 34.25, 'Auto'],\n ['F', 27371.8, 'FreeLocal', 16.14, 142.7, 'CC'], ['T', 71472.9, 'Budget', 16.02, 130.22, 'CH'],\n ['F', 95405.7, 'Budget', 7.74, 13.96, 'CC'], ['F', 95786.8, 'Budget', 21.33, 108.79, 'CC'],\n ['F', 90321.6, 'FreeLocal', 0.87, 12.39, 'Auto'], ['T', 90478.6, 'FreeLocal', 18.02, 154.49, 'CC'],\n ['F', 56187, 'Budget', 8.09, 21.83, 'CH'], ['T', 41000, 'Budget', 23.56, 229.64, 'CC'],\n ['F', 53010.8, 'FreeLocal', 12.45, 58.87, 'CC'], ['F', 75004.5, 'Budget', 26.52, 58.72, 'CC'],\n ['F', 19749.3, 'Budget', 20.22, 34.17, 'CC'], ['F', 57626.9, 'Budget', 9.38, 48.35, 'CC'],\n ['F', 20078, 'Budget', 9.65, 15.98, 'CC'], ['F', 47902, 'FreeLocal', 17.44, 72.31, 'Auto'],\n ['T', 7545.96, 'Budget', 22.39, 200.75, 'CC'], ['T', 89459.9, 'FreeLocal', 11.54, 36.05, 'CC'],\n ['T', 13576.5, 'Budget', 14.83, 40.49, 'CC'], ['F', 42031.8, 'Budget', 20.45, 59.78, 'CH'],\n ['T', 43634.5, 'Budget', 29.44, 143.5, 'CC'], ['T', 13109.1, 'Budget', 22.38, 62.87, 'Auto'],\n ['T', 92647.5, 'Budget', 16.04, 32.13, 'CC'], ['T', 21021.6, 'Budget', 3.75, 14.95, 'CC'],\n ['T', 74460.7, 'FreeLocal', 25.53, 206.46, 'CC'], ['T', 28787.4, 'Budget', 27.97, 86.06, 'Auto'],\n ['F', 13091.6, 'Budget', 22.79, 43.06, 'CC'], ['F', 62061.8, 'FreeLocal', 29.86, 82.08, 'Auto'],\n ['T', 20550.9, 'Budget', 27.72, 85.64, 'CC'], ['F', 1765.41, 'FreeLocal', 3.04, 47.99, 'CC'],\n ['T', 19131.1, 'Budget', 22.15, 57.07, 'Auto'], ['F', 6440.46, 'Budget', 22.66, 49.86, 'CH'],\n ['F', 28766.9, 'Budget', 6.11, 64.2, 'CC'], ['F', 91272.2, 'FreeLocal', 26.99, 40, 'CC'],\n ['F', 73228.3, 'Budget', 22.47, 50.58, 'Auto'], ['T', 64792.3, 'FreeLocal', 13.05, 51.41, 'CH'],\n ['T', 93322.1, 'Budget', 29.92, 38.72, 'CH'], ['F', 49910.7, 'Budget', 27.42, 51.14, 'CC'],\n ['T', 76161.4, 'FreeLocal', 11.96, 37.55, 'CC'], ['F', 55860, 'FreeLocal', 16.01, 26.37, 'CC'],\n ['F', 57360.8, 'FreeLocal', 10.36, 67.61, 'CC'], ['T', 92414.7, 'FreeLocal', 29.43, 40.06, 'CC'],\n ['T', 14578.8, 'Budget', 11.91, 107.02, 'Auto'], ['F', 87578.2, 'Budget', 0.29, 22.44, 'CC'],\n ['F', 86695.4, 'FreeLocal', 25.94, 58.03, 'CC'], ['F', 5306.11, 'Budget', 5.52, 22.94, 'CH'],\n ['F', 83287, 'FreeLocal', 29.64, 119.82, 'Auto'], ['F', 2067.82, 'Budget', 15.25, 85.9, 'CC'],\n ['F', 30665.2, 'FreeLocal', 5.83, 77.44, 'Auto'], ['F', 78000, 'FreeLocal', 6.08, 37.04, 'Auto'],\n ['F', 98680.4, 'FreeLocal', 17.58, 26.44, 'CH'], ['F', 65619.7, 'Budget', 13.56, 158.22, 'CC'],\n ['T', 95620.3, 'Budget', 10.91, 104.53, 'CC'], ['F', 85275, 'FreeLocal', 22.48, 174.09, 'Auto'],\n ['F', 66921.4, 'FreeLocal', 15.7, 24.67, 'CC'], ['F', 98453.6, 'FreeLocal', 13.72, 25.38, 'Auto'],\n ['F', 57420, 'Budget', 25.18, 277.72, 'Auto'], ['T', 68000, 'FreeLocal', 3.93, 34.35, 'CC'],\n ['F', 47639.1, 'Budget', 17.48, 57.11, 'CC'], ['F', 3911.9, 'Budget', 5.72, 39.36, 'CC'],\n ['T', 39461, 'FreeLocal', 22.87, 126.68, 'CC'], ['F', 47371, 'Budget', 4.98, 270.97, 'CC'],\n ['T', 16432.1, 'Budget', 20.41, 109.78, 'CH'], ['T', 540.4, 'Budget', 12.34, 20.1, 'Auto'],\n ['F', 80087.7, 'FreeLocal', 8.74, 31.56, 'CC'], ['F', 59691.3, 'Budget', 21.94, 278.65, 'CC'],\n ['T', 11251.1, 'FreeLocal', 28.42, 141.91, 'CC'], ['F', 93559.1, 'Budget', 1.52, 31.42, 'CC'],\n ['T', 3416.62, 'Budget', 18.97, 123.7, 'CC'], ['F', 93454.3, 'FreeLocal', 18.94, 44.13, 'Auto'],\n ['T', 5745, 'FreeLocal', 26.4, 44.11, 'CC'], ['F', 11234.7, 'Budget', 0.69, 113.42, 'CC'],\n ['F', 82931.3, 'FreeLocal', 19.24, 137.25, 'Auto'], ['F', 57483.9, 'Budget', 17.01, 44.3, 'CH'],\n ['T', 21274, 'FreeLocal', 10.87, 43.31, 'Auto'], ['F', 28267, 'FreeLocal', 21.87, 214.41, 'CC'],\n ['F', 36725.1, 'Budget', 8.65, 94.88, 'CH'], ['T', 94188.3, 'Budget', 20.86, 41.51, 'CC'],\n ['F', 91861, 'Budget', 15.32, 22.06, 'CC'], ['T', 12374.9, 'FreeLocal', 17.49, 123.59, 'Auto'],\n ['T', 69133.9, 'FreeLocal', 8.58, 46.32, 'CH'], ['F', 84948, 'FreeLocal', 11.14, 23.73, 'CH'],\n ['F', 30998.8, 'Budget', 2.4, 52.91, 'Auto'], ['F', 15924.2, 'FreeLocal', 0, 1.46, 'CH'],\n ['F', 21416.5, 'FreeLocal', 9.9, 27.61, 'CC'], ['F', 78554.2, 'Budget', 5.59, 35.88, 'Auto'],\n ['F', 38215.9, 'Budget', 0, 0.97, 'Auto'], ['F', 49745.3, 'Budget', 2.84, 27.28, 'CH'],\n ['F', 88427, 'Budget', 22.46, 69.97, 'CC'], ['F', 98003.7, 'FreeLocal', 1.03, 84.42, 'CC'],\n ['T', 89142.7, 'Budget', 3.76, 16.91, 'CC'], ['F', 74530.8, 'FreeLocal', 20.89, 127.89, 'Auto'],\n ['F', 76289.2, 'Budget', 22.2, 104.63, 'CC'], ['T', 66931.9, 'Budget', 11.72, 17.46, 'CC'],\n ['F', 9309.57, 'FreeLocal', 8.56, 108.3, 'CC'], ['F', 77726.4, 'Budget', 14, 23.52, 'Auto'],\n ['T', 2800.68, 'Budget', 28.45, 134.75, 'CC'], ['F', 90271.6, 'FreeLocal', 13.96, 110.4, 'CC'],\n ['F', 64816.6, 'Budget', 21, 27.87, 'CC'], ['F', 98217.1, 'FreeLocal', 29.49, 42.74, 'CC'],\n ['T', 15989.3, 'Budget', 3.67, 29.17, 'CC'], ['T', 84978.1, 'FreeLocal', 5.03, 88.79, 'CH'],\n ['F', 36647.9, 'Budget', 21.41, 107.38, 'CC'], ['T', 64319.2, 'Budget', 3.01, 40.16, 'CH'],\n ['T', 73338, 'Budget', 20.92, 29.93, 'Auto'], ['T', 433.74, 'FreeLocal', 3.3, 44.22, 'CC'],\n ['F', 16962.2, 'Budget', 18.6, 27.57, 'CC'], ['F', 10708.3, 'Budget', 20.83, 142.95, 'CH'],\n ['T', 2031.61, 'Budget', 21.64, 109.04, 'CC'], ['F', 16938.5, 'FreeLocal', 13.35, 22.11, 'CH'],\n ['F', 55221, 'FreeLocal', 0.49, 15.69, 'CC'], ['F', 8073.11, 'FreeLocal', 28.7, 89.05, 'Auto'],\n ['F', 95448.6, 'Budget', 24.24, 29.46, 'CH'], ['T', 24141.5, 'FreeLocal', 28.82, 125.87, 'CC'],\n ['F', 63152.6, 'Budget', 29.93, 70.01, 'CC'], ['F', 72084.7, 'Budget', 29.11, 38.13, 'CC'],\n ['F', 42760.5, 'Budget', 13.47, 53.7, 'CC'], ['F', 49072, 'Budget', 23.5, 34.25, 'Auto'],\n ['F', 27371.8, 'FreeLocal', 16.14, 142.7, 'CC'], ['T', 71472.9, 'Budget', 16.02, 130.22, 'CH'],\n ['T', 95405.7, 'Budget', 7.74, 13.96, 'CC'], ['T', 95786.8, 'Budget', 21.33, 108.79, 'CC'],\n ['F', 90321.6, 'FreeLocal', 0.87, 12.39, 'Auto'], ['T', 90478.6, 'FreeLocal', 18.02, 154.49, 'CC'],\n ['F', 56187, 'Budget', 8.09, 21.83, 'CH'], ['T', 42000, 'Budget', 23.56, 229.64, 'CC'],\n ['F', 9780.66, 'FreeLocal', 2.8, 21.39, 'CC'], ['F', 53010.8, 'FreeLocal', 12.45, 58.87, 'CC'],\n ['F', 75004.5, 'Budget', 26.52, 58.72, 'CC'], ['F', 19749.3, 'Budget', 20.22, 34.17, 'CC'],\n ['F', 57626.9, 'Budget', 9.38, 48.35, 'CC'], ['F', 20078, 'Budget', 9.65, 15.98, 'CC'],\n ['F', 47902, 'FreeLocal', 17.44, 72.31, 'Auto'], ['T', 7545.96, 'Budget', 22.39, 200.75, 'CC'],\n ['T', 89459.9, 'FreeLocal', 11.54, 36.05, 'CC'], ['T', 13576.5, 'Budget', 14.83, 40.49, 'CC'],\n ['F', 42031.8, 'Budget', 20.45, 59.78, 'CH'], ['T', 43634.5, 'Budget', 29.44, 143.5, 'CC'],\n ['T', 13109.1, 'Budget', 22.38, 62.87, 'Auto'], ['T', 92647.5, 'Budget', 16.04, 32.13, 'CC'],\n ['T', 21021.6, 'Budget', 3.75, 14.95, 'CC'], ['T', 74460.7, 'FreeLocal', 25.53, 206.46, 'CC'],\n ['T', 28787.4, 'Budget', 27.97, 86.06, 'Auto'], ['F', 13091.6, 'Budget', 22.79, 43.06, 'CC'],\n ['F', 62061.8, 'FreeLocal', 29.86, 82.08, 'Auto'], ['T', 20550.9, 'Budget', 27.72, 85.64, 'CC'],\n ['F', 1765.41, 'FreeLocal', 3.04, 47.99, 'CC'], ['T', 19131.1, 'Budget', 22.15, 57.07, 'Auto'],\n ['F', 6440.46, 'Budget', 22.66, 49.86, 'CH'], ['F', 28766.9, 'Budget', 6.11, 64.2, 'CC'],\n ['F', 91272.2, 'FreeLocal', 26.99, 40, 'CC'], ['F', 73228.3, 'Budget', 22.47, 50.58, 'Auto'],\n ['T', 64792.3, 'FreeLocal', 13.05, 51.41, 'CH'], ['T', 93322.1, 'Budget', 29.92, 38.72, 'CH'],\n ['F', 49910.7, 'Budget', 27.42, 51.14, 'CC'], ['T', 76161.4, 'FreeLocal', 11.96, 37.55, 'CC'],\n ['F', 55860, 'FreeLocal', 16.01, 26.37, 'CC'], ['F', 57360.8, 'FreeLocal', 10.36, 67.61, 'CC'],\n ['T', 92414.7, 'FreeLocal', 29.43, 40.06, 'CC'], ['T', 14578.8, 'Budget', 11.91, 107.02, 'Auto'],\n ['F', 87578.2, 'Budget', 0.29, 22.44, 'CC'], ['F', 86695.4, 'FreeLocal', 25.94, 58.03, 'CC'],\n ['F', 5306.11, 'Budget', 5.52, 22.94, 'CH'], ['F', 83287, 'FreeLocal', 29.64, 119.82, 'Auto'],\n ['F', 2067.82, 'Budget', 15.25, 85.9, 'CC'], ['F', 30665.2, 'FreeLocal', 5.83, 77.44, 'Auto'],\n ['F', 83287, 'FreeLocal', 6.08, 37.04, 'Auto'], ['T', 98680.4, 'FreeLocal', 17.58, 26.44, 'CH'],\n ['F', 65619.7, 'Budget', 13.56, 158.22, 'CC'], ['T', 95620.3, 'Budget', 10.91, 104.53, 'CC'],\n ['F', 85275, 'FreeLocal', 22.48, 174.09, 'Auto'], ['F', 66921.4, 'FreeLocal', 15.7, 24.67, 'CC'],\n ['F', 98453.6, 'FreeLocal', 13.72, 25.38, 'Auto'], ['F', 57420, 'Budget', 25.18, 277.72, 'Auto'],\n ['T', 66000, 'FreeLocal', 3.93, 34.35, 'CC'], ['F', 47639.1, 'Budget', 17.48, 57.11, 'CC'],\n ['T', 39461, 'FreeLocal', 22.87, 126.68, 'CC'], ['F', 47371, 'Budget', 4.98, 270.97, 'CC'],\n ['F', 89813.6, 'FreeLocal', 14.94, 166.18, 'CC'], ['T', 16432.1, 'Budget', 20.41, 109.78, 'CH'],\n ['T', 540.4, 'Budget', 12.34, 20.1, 'Auto'], ['F', 80087.7, 'FreeLocal', 8.74, 31.56, 'CC'],\n ['F', 59691.3, 'Budget', 21.94, 278.65, 'CC'], ['T', 11251.1, 'FreeLocal', 28.42, 141.91, 'CC'],\n ['F', 93559.1, 'Budget', 1.52, 31.42, 'CC'], ['T', 3416.62, 'Budget', 18.97, 123.7, 'CC'],\n ['F', 93454.3, 'FreeLocal', 18.94, 44.13, 'Auto'], ['T', 5745, 'FreeLocal', 26.4, 44.11, 'CC'],\n ['F', 11234.7, 'Budget', 0.69, 113.42, 'CC'], ['F', 82931.3, 'FreeLocal', 19.24, 137.25, 'Auto'],\n ['F', 57483.9, 'Budget', 17.01, 44.3, 'CH'], ['T', 21274, 'FreeLocal', 10.87, 43.31, 'Auto'],\n ['F', 28267, 'FreeLocal', 21.87, 214.41, 'CC'], ['F', 36725.1, 'Budget', 8.65, 94.88, 'CH'],\n ['T', 94188.3, 'Budget', 20.86, 41.51, 'CC'], ['F', 91861, 'Budget', 15.32, 22.06, 'CC'],\n ['T', 12374.9, 'FreeLocal', 17.49, 123.59, 'Auto'], ['F', 69133.9, 'FreeLocal', 8.58, 46.32, 'CH'],\n ['F', 84948, 'FreeLocal', 11.14, 23.73, 'CH'], ['F', 30998.8, 'Budget', 2.4, 52.91, 'Auto'],\n ['F', 21416.5, 'FreeLocal', 9.9, 27.61, 'CC'], ['F', 78554.2, 'Budget', 5.59, 35.88, 'Auto'],\n ['F', 38215.9, 'Budget', 0, 0.97, 'Auto'], ['F', 49745.3, 'Budget', 2.84, 27.28, 'CH'],\n ['F', 88427, 'Budget', 22.46, 69.97, 'CC'], ['F', 98003.7, 'FreeLocal', 1.03, 84.42, 'CC'],\n ['T', 89142.7, 'Budget', 3.76, 16.91, 'CC'], ['F', 74530.8, 'FreeLocal', 20.89, 127.89, 'Auto'],\n ['F', 76289.2, 'Budget', 22.2, 104.63, 'CC'], ['T', 66931.9, 'Budget', 11.72, 17.46, 'CC'],\n ['F', 9309.57, 'FreeLocal', 8.56, 108.3, 'CC'], ['F', 77726.4, 'Budget', 14, 23.52, 'Auto'],\n ['T', 2800.68, 'Budget', 28.45, 134.75, 'CC'], ['F', 90271.6, 'FreeLocal', 13.96, 110.4, 'CC'],\n ['F', 64816.6, 'Budget', 21, 27.87, 'CC'], ['F', 98217.1, 'FreeLocal', 29.49, 42.74, 'CC'],\n ['T', 15989.3, 'Budget', 3.67, 29.17, 'CC'], ['F', 84978.1, 'FreeLocal', 5.03, 88.79, 'CH'],\n ['T', 36647.9, 'Budget', 21.41, 107.38, 'CC'], ['T', 64319.2, 'Budget', 3.01, 40.16, 'CH'],\n ['T', 73338, 'Budget', 20.92, 29.93, 'Auto'], ['T', 433.74, 'FreeLocal', 3.3, 44.22, 'CC'],\n ['F', 16962.2, 'Budget', 18.6, 27.57, 'CC'], ['F', 10708.3, 'Budget', 20.83, 142.95, 'CH'],\n ['T', 2031.61, 'Budget', 21.64, 109.04, 'CC'], ['F', 16938.5, 'FreeLocal', 13.35, 22.11, 'CH'],\n ['F', 55221, 'FreeLocal', 0.49, 15.69, 'CC'], ['F', 8073.11, 'FreeLocal', 28.7, 89.05, 'Auto'],\n ['F', 95448.6, 'Budget', 24.24, 29.46, 'CH'], ['T', 24141.5, 'FreeLocal', 28.82, 125.87, 'CC'],\n ['F', 63152.6, 'Budget', 29.93, 70.01, 'CC'], ['F', 72084.7, 'Budget', 29.11, 38.13, 'CC'],\n ['F', 42760.5, 'Budget', 13.47, 53.7, 'CC'], ['F', 49072, 'Budget', 23.5, 34.25, 'Auto'],\n ['F', 27371.8, 'FreeLocal', 16.14, 142.7, 'CC'], ['T', 71472.9, 'Budget', 16.02, 130.22, 'CH'],\n ['T', 95405.7, 'Budget', 7.74, 13.96, 'CC'], ['T', 95786.8, 'Budget', 21.33, 108.79, 'CC'],\n ['T', 90321.6, 'FreeLocal', 0.87, 12.39, 'CC'], ['T', 90478.6, 'FreeLocal', 18.02, 154.49, 'CH'],\n ['F', 56187, 'Budget', 8.09, 21.83, 'CH'], ['T', 35089, 'Budget', 23.56, 229.64, 'CC'],\n ['F', 53010.8, 'FreeLocal', 12.45, 58.87, 'CC'], ['F', 75004.5, 'Budget', 26.52, 58.72, 'CC'],\n ['F', 19749.3, 'Budget', 20.22, 34.17, 'CC'], ['F', 57626.9, 'Budget', 9.38, 48.35, 'CC'],\n ['F', 20078, 'Budget', 9.65, 15.98, 'CC'], ['F', 47902, 'FreeLocal', 17.44, 72.31, 'Auto'],\n ['T', 7545.96, 'Budget', 22.39, 200.75, 'CC'], ['T', 89459.9, 'FreeLocal', 11.54, 36.05, 'CC'],\n ['T', 13576.5, 'Budget', 14.83, 40.49, 'CC'], ['F', 42031.8, 'Budget', 20.45, 59.78, 'CH'],\n ['T', 43634.5, 'Budget', 29.44, 143.5, 'CC'], ['T', 13109.1, 'Budget', 22.38, 62.87, 'Auto'],\n ['T', 92647.5, 'Budget', 16.04, 32.13, 'CC'], ['T', 21021.6, 'Budget', 3.75, 14.95, 'CC'],\n ['T', 74460.7, 'FreeLocal', 25.53, 206.46, 'CC'], ['T', 28787.4, 'Budget', 27.97, 86.06, 'Auto'],\n ['F', 13091.6, 'Budget', 22.79, 43.06, 'CC'], ['F', 62061.8, 'FreeLocal', 29.86, 82.08, 'Auto'],\n ['T', 20550.9, 'Budget', 27.72, 85.64, 'CC'], ['F', 1765.41, 'FreeLocal', 3.04, 47.99, 'CC'],\n ['T', 19131.1, 'Budget', 22.15, 57.07, 'Auto'], ['F', 6440.46, 'Budget', 22.66, 49.86, 'CH'],\n ['F', 28766.9, 'Budget', 6.11, 64.2, 'CC'], ['F', 91272.2, 'FreeLocal', 26.99, 40, 'CC'],\n ['F', 73228.3, 'Budget', 22.47, 50.58, 'Auto'], ['T', 64792.3, 'FreeLocal', 13.05, 51.41, 'CH'],\n ['T', 93322.1, 'Budget', 29.92, 38.72, 'CH'], ['F', 49910.7, 'Budget', 27.42, 51.14, 'CC'],\n ['T', 76161.4, 'FreeLocal', 11.96, 37.55, 'CC'], ['F', 55860, 'FreeLocal', 16.01, 26.37, 'CC'],\n ['F', 57360.8, 'FreeLocal', 10.36, 67.61, 'CC'], ['T', 92414.7, 'FreeLocal', 29.43, 40.06, 'CC'],\n ['T', 14578.8, 'Budget', 11.91, 107.02, 'Auto'], ['F', 87578.2, 'Budget', 0.29, 22.44, 'CC'],\n ['F', 86695.4, 'FreeLocal', 25.94, 58.03, 'CC'], ['F', 77000, 'FreeLocal', 29.64, 119.82, 'Auto'],\n ['F', 2067.82, 'Budget', 15.25, 85.9, 'CC'], ['F', 30665.2, 'FreeLocal', 5.83, 77.44, 'Auto'],\n ['F', 83287, 'FreeLocal', 6.08, 37.04, 'Auto'], ['T', 98680.4, 'FreeLocal', 17.58, 26.44, 'CH'],\n ['F', 65619.7, 'Budget', 13.56, 158.22, 'CC'], ['T', 95620.3, 'Budget', 10.91, 104.53, 'CC'],\n ['F', 85275, 'FreeLocal', 22.48, 174.09, 'Auto'], ['F', 66921.4, 'FreeLocal', 15.7, 24.67, 'CC'],\n ['F', 98453.6, 'FreeLocal', 13.72, 25.38, 'Auto'], ['F', 57420, 'Budget', 25.18, 277.72, 'Auto'],\n ['T', 70000, 'FreeLocal', 3.93, 34.35, 'CC'], ['F', 47639.1, 'Budget', 17.48, 57.11, 'CC'],\n ['T', 39461, 'FreeLocal', 22.87, 126.68, 'CC'], ['F', 47371, 'Budget', 4.98, 270.97, 'CC'],\n ['T', 16432.1, 'Budget', 20.41, 109.78, 'CH'], ['T', 67388, 'Budget', 4.79, 96.33, 'CC'],\n ['T', 84166.1, 'Budget', 3.28, 15.02, 'CC'], ['T', 540.4, 'Budget', 12.34, 20.1, 'Auto'],\n ['T', 59613.1, 'Budget', 12.37, 175.78, 'CC'], ['F', 80087.7, 'FreeLocal', 8.74, 31.56, 'CC'],\n ['F', 59691.3, 'Budget', 21.94, 278.65, 'CC'], ['T', 11251.1, 'FreeLocal', 28.42, 141.91, 'CC'],\n ['T', 45429.7, 'FreeLocal', 24.7, 97.74, 'CH'], ['T', 67388, 'Budget', 4.79, 96.33, 'CC'],\n ['T', 84166.1, 'Budget', 3.28, 15.02, 'CC'], ['F', 93559.1, 'Budget', 1.52, 31.42, 'CC'],\n ['T', 3416.62, 'Budget', 18.97, 123.7, 'CC'], ['F', 93454.3, 'FreeLocal', 18.94, 44.13, 'Auto'],\n ['T', 5745, 'FreeLocal', 26.4, 44.11, 'CC'], ['T', 59613.1, 'Budget', 12.37, 175.78, 'CC'],\n ['T', 45429.7, 'FreeLocal', 24.7, 97.74, 'CH'], ['T', 67388, 'Budget', 4.79, 96.33, 'CC'],\n ['T', 84166.1, 'Budget', 3.28, 15.02, 'CC'], ['F', 60095.2, 'Budget', 1.71, 117.85, 'Auto'],\n ['F', 11234.7, 'Budget', 0.69, 113.42, 'CC'], ['F', 82931.3, 'FreeLocal', 19.24, 137.25, 'Auto'],\n ['F', 57483.9, 'Budget', 17.01, 44.3, 'CH'], ['T', 59613.1, 'Budget', 12.37, 175.78, 'CC'],\n ['T', 21274, 'FreeLocal', 10.87, 43.31, 'Auto'], ['F', 28267, 'FreeLocal', 21.87, 214.41, 'CC'],\n ['T', 45429.7, 'FreeLocal', 24.7, 97.74, 'CH'], ['F', 36725.1, 'Budget', 8.65, 94.88, 'CH'],\n ['T', 67388, 'Budget', 4.79, 96.33, 'CC'], ['T', 84166.1, 'Budget', 3.28, 15.02, 'CC'],\n ['T', 67388, 'Budget', 4.79, 96.33, 'CC'], ['T', 94188.3, 'Budget', 20.86, 41.51, 'CC'],\n ['F', 84166.1, 'Budget', 3.28, 15.02, 'CC'], ['T', 59613.1, 'Budget', 12.37, 175.78, 'CC'],\n ['F', 91861, 'Budget', 15.32, 22.06, 'CC'], ['T', 45429.7, 'FreeLocal', 24.7, 97.74, 'CH'],\n ['T', 67388, 'Budget', 4.79, 96.33, 'CC'], ['T', 12374.9, 'FreeLocal', 17.49, 123.59, 'Auto'],\n ['F', 69133.9, 'FreeLocal', 8.58, 46.32, 'CH'], ['T', 84166.1, 'Budget', 3.28, 15.02, 'CC'],\n ['F', 84948, 'FreeLocal', 11.14, 23.73, 'CH'], ['F', 30998.8, 'Budget', 2.4, 52.91, 'Auto'],\n ['T', 59613.1, 'Budget', 12.37, 200.5, 'CC'], ['T', 45429.7, 'FreeLocal', 24.7, 97.74, 'CH'],\n ['T', 67388, 'Budget', 4.79, 96.33, 'CC'], ['T', 84166.1, 'Budget', 3.28, 15.02, 'CC'],\n ['T', 59613.1, 'Budget', 12.37, 134.67, 'CC'], ['F', 21416.5, 'FreeLocal', 9.9, 27.61, 'CC'],\n ['T', 45429.7, 'FreeLocal', 24.7, 97.74, 'CH'], ['T', 67388, 'Budget', 4.79, 96.33, 'CC'],\n ['T', 84166.1, 'Budget', 3.28, 15.02, 'CC'], ['F', 78554.2, 'Budget', 5.59, 35.88, 'Auto'],\n ['F', 38215.9, 'Budget', 0, 0.97, 'Auto'], ['F', 49745.3, 'Budget', 2.84, 27.28, 'CH'],\n ['T', 59613.1, 'Budget', 12.37, 175.78, 'CC'], ['F', 88427, 'Budget', 22.46, 69.97, 'CC'],\n ['F', 98003.7, 'FreeLocal', 1.03, 84.42, 'CC'], ['T', 89142.7, 'Budget', 3.76, 16.91, 'CC'],\n ['F', 74530.8, 'FreeLocal', 20.89, 127.89, 'Auto'], ['F', 76289.2, 'Budget', 22.2, 104.63, 'CC'],\n ['T', 66931.9, 'Budget', 11.72, 17.46, 'CC'], ['F', 9309.57, 'FreeLocal', 8.56, 108.3, 'CC'],\n ['F', 77726.4, 'Budget', 14, 23.52, 'Auto'], ['T', 2800.68, 'Budget', 28.45, 134.75, 'CC'],\n ['F', 90271.6, 'FreeLocal', 13.96, 110.4, 'CC'], ['F', 64816.6, 'Budget', 21, 27.87, 'CC'],\n ['F', 98217.1, 'FreeLocal', 29.49, 42.74, 'CC'], ['T', 15989.3, 'Budget', 3.67, 29.17, 'CC'],\n ['T', 84978.1, 'FreeLocal', 5.03, 88.79, 'CH'], ['F', 36647.9, 'Budget', 21.41, 107.38, 'CC'],\n ['T', 64319.2, 'Budget', 3.01, 40.16, 'CH'], ['F', 73338, 'Budget', 20.92, 29.93, 'Auto'],\n ['T', 433.74, 'FreeLocal', 3.3, 44.22, 'CC'], ['F', 16962.2, 'Budget', 18.6, 27.57, 'CC'],\n ['F', 10708.3, 'Budget', 20.83, 142.95, 'CH'], ['T', 2031.61, 'Budget', 21.64, 109.04, 'CC'],\n ['F', 16938.5, 'FreeLocal', 13.35, 22.11, 'CH'], ['F', 55221, 'FreeLocal', 0.49, 15.69, 'CC'],\n ['F', 8073.11, 'FreeLocal', 28.7, 89.05, 'Auto'], ['F', 95448.6, 'Budget', 24.24, 29.46, 'CH'],\n ['T', 24141.5, 'FreeLocal', 28.82, 125.87, 'CC'], ['F', 63152.6, 'Budget', 29.93, 70.01, 'CC'],\n ['F', 72084.7, 'Budget', 29.11, 38.13, 'CC'], ['F', 42760.5, 'Budget', 13.47, 53.7, 'CC'],\n ['F', 49072, 'Budget', 23.5, 34.25, 'Auto'], ['F', 27371.8, 'FreeLocal', 16.14, 142.7, 'CC'],\n ['T', 71472.9, 'Budget', 16.02, 130.22, 'CH'], ['T', 95405.7, 'Budget', 7.74, 13.96, 'CC'],\n ['T', 95786.8, 'Budget', 21.33, 108.79, 'CC'], ['F', 90321.6, 'FreeLocal', 0.87, 12.39, 'Auto'],\n ['T', 90478.6, 'FreeLocal', 18.02, 154.49, 'CC'], ['F', 56187, 'Budget', 8.09, 21.83, 'CH'],\n ['F', 28313.1, 'Budget', 6.89, 13.63, 'CC'], ['F', 29616, 'FreeLocal', 29.78, 75.29, 'CH'],\n ['F', 19732.8, 'FreeLocal', 24.81, 47.25, 'CC'], ['F', 41690.5, 'FreeLocal', 2.5, 31.45, 'CC'],\n ['F', 96.33, 'Budget', 26.13, 59.01, 'CC'], ['F', 52004.8, 'Budget', 5.03, 28.14, 'CH'],\n ['T', 78851.3, 'FreeLocal', 0.37, 29.04, 'CC'], ['T', 17540.7, 'Budget', 22.17, 36.2, 'Auto'],\n ['T', 83891.9, 'Budget', 28.92, 74.4, 'CH'], ['T', 28220.8, 'FreeLocal', 26.49, 38.95, 'CC'],\n ['T', 28589.1, 'FreeLocal', 13.19, 100.28, 'CC']]\n};\n\n// Call Code to Build the system ///////////////////////////////////////////////////////////////////\n\nvar v = new BrunelVis('visidfe341676-52cd-11e7-9ed8-002590fb6500');\nv.build(table1);\n\n });\n});",
"text/plain": "<IPython.core.display.Javascript object>"
},
"execution_count": 5,
"output_type": "execute_result",
"metadata": {}
}
],
"cell_type": "code",
"source": "import brunel\nMerged = merged.toPandas()\n%brunel data('Merged') bar x(CHURN) y(EstIncome) mean(EstIncome) color(LocalBilltype) stack tooltip(EstIncome) | x(LongDistance) y(Usage) point color(Paymethod) tooltip(LongDistance, Usage) :: width=1100, height=400 "
},
{
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": "<IPython.core.display.HTML object>",
"text/html": "<!--\n ~ Copyright (c) 2015 IBM Corporation and others.\n ~\n ~ Licensed under the Apache License, Version 2.0 (the \"License\");\n ~ You may not use this file except in compliance with the License.\n ~ You may obtain a copy of the License at\n ~\n ~ http://www.apache.org/licenses/LICENSE-2.0\n ~\n ~ Unless required by applicable law or agreed to in writing, software\n ~ distributed under the License is distributed on an \"AS IS\" BASIS,\n ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n ~ See the License for the specific language governing permissions and\n ~ limitations under the License.\n -->\n\n\n<link rel=\"stylesheet\" type=\"text/css\" href=\"/data/jupyter2/e1f377e3-d279-45fc-8191-4754435a94b5/nbextensions/brunel_ext/brunel.2.3.css\">\n<link rel=\"stylesheet\" type=\"text/css\" href=\"/data/jupyter2/e1f377e3-d279-45fc-8191-4754435a94b5/nbextensions/brunel_ext/sumoselect.css\">\n\n<style>\n #visid00dce51a-52ce-11e7-9ed8-002590fb6500.brunel .chart1 .element1 .element {\n\tsize: 100%;\n\tstroke: none;\n\tsymbol: rect;\n}\n</style>\n\n<div id=\"controlsid00dce704-52ce-11e7-9ed8-002590fb6500\" class=\"brunel\"/>\n<svg id=\"visid00dce51a-52ce-11e7-9ed8-002590fb6500\" width=\"500\" height=\"400\"></svg>"
},
"output_type": "display_data",
"metadata": {}
},
{
"data": {
"application/javascript": "/*\n * Copyright (c) 2015 IBM Corporation and others.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * You may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nrequire.config({\n waitSeconds: 60,\n paths: {\n 'd3': '//cdnjs.cloudflare.com/ajax/libs/d3/4.2.1/d3.min',\n 'topojson': '//cdnjs.cloudflare.com/ajax/libs/topojson/1.6.20/topojson.min',\n 'brunel' : '/data/jupyter2/e1f377e3-d279-45fc-8191-4754435a94b5/nbextensions/brunel_ext/brunel.2.3.min',\n 'brunelControls' : '/data/jupyter2/e1f377e3-d279-45fc-8191-4754435a94b5/nbextensions/brunel_ext/brunel.controls.2.3.min'\n },\n shim: {\n 'brunel' : {\n exports: 'BrunelD3',\n deps: ['d3', 'topojson'],\n init: function() {\n return {\n BrunelD3 : BrunelD3,\n BrunelData : BrunelData\n }\n }\n },\n 'brunelControls' : {\n exports: 'BrunelEventHandlers',\n init: function() {\n return {\n BrunelEventHandlers: BrunelEventHandlers,\n BrunelJQueryControlFactory: BrunelJQueryControlFactory\n }\n }\n }\n\n }\n\n});\n\nrequire([\"d3\"], function(d3) {\n require([\"brunel\", \"brunelControls\"], function(brunel, brunelControls) {\n function BrunelVis(visId) {\n \"use strict\"; // strict mode\n var datasets = [], // array of datasets for the original data\n pre = function(d, i) { return d }, // default pre-process does nothing\n post = function(d, i) { return d }, // default post-process does nothing\n transitionTime = 200, // transition time for animations\n charts = [], // the charts in the system\n vis = d3.select('#' + visId).attr('class', 'brunel'); // the SVG container\n\n BrunelD3.addDefinitions(vis); // ensure standard symbols present\n\n // Define chart #1 in the visualization //////////////////////////////////////////////////////////\n\n charts[0] = function(parentNode, filterRows) {\n var geom = BrunelD3.geometry(parentNode || vis.node(), 0, 0, 1, 1, 5, 43, 37, 66),\n elements = []; // array of elements in this chart\n\n // Define groups for the chart parts ///////////////////////////////////////////////////////////\n\n var chart = vis.append('g').attr('class', 'chart1')\n .attr('transform','translate(' + geom.chart_left + ',' + geom.chart_top + ')');\n var overlay = chart.append('g').attr('class', 'element').attr('class', 'overlay');\n var zoom = d3.zoom().scaleExtent([1/3,3]);\n var zoomNode = overlay.append('rect').attr('class', 'overlay')\n .attr('x', geom.inner_left).attr('y', geom.inner_top)\n .attr('width', geom.inner_rawWidth).attr('height', geom.inner_rawHeight)\n .style('cursor', 'move').call(zoom)\n .node();\n zoomNode.__zoom = d3.zoomIdentity;\n chart.append('rect').attr('class', 'background').attr('width', geom.chart_right-geom.chart_left).attr('height', geom.chart_bottom-geom.chart_top);\n var interior = chart.append('g').attr('class', 'interior zoomNone')\n .attr('transform','translate(' + geom.inner_left + ',' + geom.inner_top + ')')\n .attr('clip-path', 'url(#clip_visid00dce51a-52ce-11e7-9ed8-002590fb6500_chart1_inner)');\n interior.append('rect').attr('class', 'inner').attr('width', geom.inner_width).attr('height', geom.inner_height);\n var gridGroup = interior.append('g').attr('class', 'grid');\n var axes = chart.append('g').attr('class', 'axis')\n .attr('transform','translate(' + geom.inner_left + ',' + geom.inner_top + ')');\n var legends = chart.append('g').attr('class', 'legend')\n .attr('transform','translate(' + (geom.chart_right-geom.chart_left - 3) + ',' + 0 + ')');\n vis.append('clipPath').attr('id', 'clip_visid00dce51a-52ce-11e7-9ed8-002590fb6500_chart1_inner').append('rect')\n .attr('x', 0).attr('y', 0)\n .attr('width', geom.inner_rawWidth+1).attr('height', geom.inner_rawHeight+1);\n\n // Scales //////////////////////////////////////////////////////////////////////////////////////\n\n var scale_x = d3.scalePoint().padding(0.5)\n .domain(['Budget', 'FreeLocal'])\n .range([0, geom.inner_width]);\n var scale_inner = d3.scaleLinear().domain([0,1])\n .range([-0.5, 0.5]);\n var scale_y = d3.scaleLinear().domain([-0.5, 4.5000005])\n .range([geom.inner_height, 0]);\n var base_scales = [scale_x, scale_y]; // untransformed original scales\n\n // Axes ////////////////////////////////////////////////////////////////////////////////////////\n\n axes.append('g').attr('class', 'x axis')\n .attr('transform','translate(0,' + geom.inner_rawHeight + ')')\n .attr('clip-path', 'url(#clip_visid00dce51a-52ce-11e7-9ed8-002590fb6500_chart1_haxis)');\n vis.append('clipPath').attr('id', 'clip_visid00dce51a-52ce-11e7-9ed8-002590fb6500_chart1_haxis').append('polyline')\n .attr('points', '-1,-1000, -1,-1 -5,5, -1000,5, -100,1000, 10000,1000 10000,-1000');\n axes.select('g.axis.x').append('text').attr('class', 'title').text('Local Billtype').style('text-anchor', 'middle')\n .attr('x',geom.inner_rawWidth/2)\n .attr('y', geom.inner_bottom - 2.0).attr('dy','-0.27em');\n axes.append('g').attr('class', 'y axis')\n .attr('clip-path', 'url(#clip_visid00dce51a-52ce-11e7-9ed8-002590fb6500_chart1_vaxis)');\n vis.append('clipPath').attr('id', 'clip_visid00dce51a-52ce-11e7-9ed8-002590fb6500_chart1_vaxis').append('polyline')\n .attr('points', '-1000,-10000, 10000,-10000, 10000,' + (geom.inner_rawHeight+1) + ', -1,' + (geom.inner_rawHeight+1) + ', -1,' + (geom.inner_rawHeight+5) + ', -1000,' + (geom.inner_rawHeight+5) );\n axes.select('g.axis.y').append('text').attr('class', 'title').text('Dropped').style('text-anchor', 'middle')\n .attr('x',-geom.inner_rawHeight/2)\n .attr('y', 4-geom.inner_left).attr('dy', '0.7em').attr('transform', 'rotate(270)');\n\n var axis_bottom = d3.axisBottom(scale_x).ticks(Math.min(10, Math.round(geom.inner_width / 82.5)));\n var axis_left = d3.axisLeft(scale_y).ticks(Math.min(10, Math.round(geom.inner_width / 20)));\n\n function buildAxes(time) {\n axis_bottom.tickValues(BrunelD3.filterTicks(scale_x))\n var axis_x = axes.select('g.axis.x');\n BrunelD3.transition(axis_x, time).call(axis_bottom.scale(scale_x));\n var axis_y = axes.select('g.axis.y');\n BrunelD3.transition(axis_y, time).call(axis_left.scale(scale_y));\n }\n zoom.on('zoom', function(t, time) {\n t = t ||BrunelD3.restrictZoom(d3.event.transform, geom, this);\n scale_y = t.rescaleY(base_scales[1]);\n zoomNode.__zoom = t;\n interior.attr('class', 'interior ' + BrunelD3.zoomLabel(t.k));;\n build(time || -1);\n });\n\n // Define element #1 ///////////////////////////////////////////////////////////////////////////\n\n elements[0] = function() {\n var original, processed, // data sets passed in and then transformed\n element, data, // brunel element information and brunel data\n selection, merged; // d3 selection and merged selection\n var elementGroup = interior.append('g').attr('class', 'element1'),\n main = elementGroup.append('g').attr('class', 'main'),\n labels = BrunelD3.undoTransform(elementGroup.append('g').attr('class', 'labels').attr('aria-hidden', 'true'), elementGroup);\n\n function makeData() {\n original = datasets[0];\n if (filterRows) original = original.retainRows(filterRows);\n processed = pre(original, 0)\n .summarize('#count=#count:sum; LocalBilltype=LocalBilltype:base; Dropped=Dropped');\n processed = post(processed, 0);\n var f0 = processed.field('LocalBilltype'),\n f1 = processed.field('Dropped'),\n f2 = processed.field('#count'),\n f3 = processed.field('#row'),\n f4 = processed.field('#selection');\n var keyFunc = function(d) { return f3.value(d) };\n data = {\n LocalBilltype:function(d) { return f0.value(d.row) },\n Dropped: function(d) { return f1.value(d.row) },\n $count: function(d) { return f2.value(d.row) },\n $row: function(d) { return f3.value(d.row) },\n $selection: function(d) { return f4.value(d.row) },\n LocalBilltype_f:function(d) { return f0.valueFormatted(d.row) },\n Dropped_f: function(d) { return f1.valueFormatted(d.row) },\n $count_f: function(d) { return f2.valueFormatted(d.row) },\n $row_f: function(d) { return f3.valueFormatted(d.row) },\n $selection_f: function(d) { return f4.valueFormatted(d.row) },\n _split: function(d) { return f2.value(d.row) },\n _key: keyFunc,\n _rows: BrunelD3.makeRowsWithKeys(keyFunc, processed.rowCount())\n };\n }\n // Aesthetic Functions\n var scale_color = d3.scaleSqrt().domain([4, 28.61099, 75.652565, 145.12473, 237.02747, 351.36081, 488.12473, 647.31923, 828.94432, 1033])\n .interpolate(d3.interpolateHcl)\n .range([ '#FFFFFF', '#FFE3E3', '#FFC6C6', '#FFAAAA', '#FF8E8E', '#FF7171', \n '#FF5555', '#FF3939', '#FF1C1C', '#FF0000']);\n var color = function(d) { return scale_color(data.$count(d)) };\n legends._legend = legends._legend || { title: ['Count'], \n ticks: [1200, 1000, 800, 600, 400, 200, 0]};\n legends._legend.color = scale_color;\n\n // Build element from data ///////////////////////////////////////////////////////////////////\n\n function build(transitionMillis) {\n element = elements[0];\n var w = 1.0 * Math.abs(scale_x(scale_x.domain()[1]) - scale_x(scale_x.domain()[0]) );\n var x = function(d) { return scale_x(data.LocalBilltype(d))};\n var h = 1.0 * Math.abs( scale_y(scale_y.domain()[0] + 1.0) - scale_y.range()[0] );\n var y = function(d) { return scale_y(data.Dropped(d))};\n\n // Define selection entry operations\n function initialState(selection) {\n selection\n .attr('class', 'element point filled')\n }\n\n // Define selection update operations on merged data\n function updateState(selection) {\n selection\n .each(function(d) {\n var width = w, left = x(d) - width/2, \n height = h, top = y(d) - height/2;\n this.r = {x:left, y:top, w:width, h:height};\n })\n .attr('x', function(d) { return this.r.x })\n .attr('y', function(d) { return this.r.y })\n .attr('width', function(d) { return this.r.w })\n .attr('height', function(d) { return this.r.h })\n .filter(BrunelD3.hasData) // following only performed for data items\n .style('fill', color);\n }\n\n // Define labeling for the selection\n function label(selection, transitionMillis) {\n\n var tooltipLabeling = {\n index: -1, method: 'box', location: ['center', 'top'], inside: true, align: 'middle', pad: 0, dy: 0.7,\n fit: true, granularity: 0,\n content: function(d) {\n return d.row == null ? null : '<span class=\"title\">Dropped: </span>'\n\t\t\t+ '<span class=\"field\">' + data.Dropped_f(d) + '</span>'\n\t\t\t+ '<br/>'\n\t\t\t+ '<span class=\"title\">Count: </span>'\n\t\t\t+ '<span class=\"field\">' + data.$count_f(d) + '</span>'\n }\n };\n BrunelD3.addTooltip(selection, tooltipLabeling, geom);\n }\n // Create selections, set the initial state and transition updates\n selection = main.selectAll('.element').data(data._rows, function(d) { return d.key });\n var added = selection.enter().append('rect');\n merged = selection.merge(added);\n initialState(added);\n selection.filter(BrunelD3.hasData)\n .classed('selected', BrunelD3.isSelected(data))\n .filter(BrunelD3.isSelected(data)).raise();\n updateState(BrunelD3.transition(merged, transitionMillis));\n label(merged, transitionMillis);\n\n BrunelD3.transition(selection.exit(), transitionMillis/3)\n .style('opacity', 0.5).each( function() {\n this.remove(); BrunelD3.removeLabels(this); \n });\n }\n\n return {\n data: function() { return processed },\n original: function() { return original },\n internal: function() { return data },\n selection: function() { return merged },\n makeData: makeData,\n build: build,\n chart: function() { return charts[0] },\n group: function() { return elementGroup },\n fields: {\n x: ['LocalBilltype'],\n y: ['Dropped'],\n key: ['#row'],\n color: ['#count']\n }\n };\n }();\n\n function build(time, noData) {\n var first = elements[0].data() == null;\n if (first) time = 0; // no transition for first call\n buildAxes(time);\n if ((first || time > -1) && !noData) {\n elements[0].makeData();\n BrunelD3.addLegend(legends, legends._legend);\n }\n elements[0].build(time);\n }\n\n // Expose the following components of the chart\n return {\n elements : elements,\n interior : interior,\n scales: {x:scale_x, y:scale_y},\n zoom: function(params, time) {\n if (params) zoom.on('zoom').call(zoomNode, params, time);\n return d3.zoomTransform(zoomNode);\n },\n build : build\n };\n }();\n\n function setData(rowData, i) { datasets[i||0] = BrunelD3.makeData(rowData) }\n function updateAll(time) { charts.forEach(function(x) {x.build(time || 0)}) }\n function buildAll() {\n for (var i=0;i<arguments.length;i++) setData(arguments[i], i);\n updateAll(transitionTime);\n }\n\n return {\n dataPreProcess: function(f) { if (f) pre = f; return pre },\n dataPostProcess: function(f) { if (f) post = f; return post },\n data: function(d,i) { if (d) setData(d,i); return datasets[i||0] },\n visId: visId,\n build: buildAll,\n rebuild: updateAll,\n charts: charts\n }\n}\n\n// Data Tables /////////////////////////////////////////////////////////////////////////////////////\n\nvar table1 = {\n summarized: true,\n names: ['LocalBilltype', 'Dropped', '#count'], \n options: ['string', 'numeric', 'numeric'], \n rows: [['Budget', 0, 1033], ['FreeLocal', 0, 844], ['Budget', 1, 83], ['FreeLocal', 1, 64],\n ['Budget', 2, 6], ['FreeLocal', 2, 9], ['Budget', 3, 4], ['FreeLocal', 4, 23]]\n};\n\n// Call Code to Build the system ///////////////////////////////////////////////////////////////////\n\nvar v = new BrunelVis('visid00dce51a-52ce-11e7-9ed8-002590fb6500');\nv.build(table1);\n\n });\n});",
"text/plain": "<IPython.core.display.Javascript object>"
},
"execution_count": 6,
"output_type": "execute_result",
"metadata": {}
}
],
"cell_type": "code",
"source": "# Heat map\n%brunel data('Merged') x(LocalBilltype) y(Dropped) color(#count:red) style('symbol:rect; size:100%; stroke:none') tooltip(Dropped,#count)"
},
{
"source": "**If you haven't already installed it, run the following cell to install the pixiedust Python library in your notebook environment. Then uncomment it and run it once.**\n",
"cell_type": "markdown",
"metadata": {}
},
{
"execution_count": 7,
"metadata": {
"scrolled": true
},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": "Collecting pixiedust\n Downloading pixiedust-1.0.6.tar.gz (113kB)\n\u001b[K 100% |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588| 122kB 2.4MB/s \n\u001b[?25hRequirement already up-to-date: mpld3 in /gpfs/global_fs01/sym_shared/YPProdSpark/user/s191-4754435a94b541-9fb5ca908bcc/.local/lib/python2.7/site-packages (from pixiedust)\nCollecting lxml (from pixiedust)\n Downloading lxml-3.8.0-cp27-cp27m-manylinux1_x86_64.whl (6.8MB)\n\u001b[K 100% |\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588| 6.8MB 178kB/s \n\u001b[?25hCollecting geojson (from pixiedust)\n Downloading geojson-1.3.5-py2.py3-none-any.whl\nBuilding wheels for collected packages: pixiedust\n Running setup.py bdist_wheel for pixiedust ... \u001b[?25l-\b \b\\\b \b|\b \b/\b \bdone\n\u001b[?25h Stored in directory: /gpfs/fs01/user/s191-4754435a94b541-9fb5ca908bcc/.cache/pip/wheels/1c/d2/ee/eeca50b5b09e6783cb3a5caa917129629fc55f2b6e63dcd509\nSuccessfully built pixiedust\nInstalling collected packages: lxml, geojson, pixiedust\n Found existing installation: lxml 3.7.3\n Uninstalling lxml-3.7.3:\n Successfully uninstalled lxml-3.7.3\n Found existing installation: pixiedust 1.0.4\n Uninstalling pixiedust-1.0.4:\n Successfully uninstalled pixiedust-1.0.4\nSuccessfully installed geojson-1.3.5 lxml-3.8.0 pixiedust-1.0.6\n"
}
],
"cell_type": "code",
"source": "#!pip install --user --upgrade pixiedust"
},
{
"execution_count": 8,
"metadata": {
"pixiedust": {
"displayParams": {
"aggregation": "AVG",
"keyFields": "Paymethod",
"handlerId": "barChart",
"valueFields": "Usage",
"rowCount": "500",
"chartsize": "55"
}
}
},
"outputs": [
{
"data": {
"text/plain": "<IPython.core.display.HTML object>",
"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><img style=\"max-width:initial !important\" src=\"data:image/png;base64,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07LZbLryyis1YsSIOpgUaHk4gwI0UZGRkdq9e1eT/GWBjeHvf/+71q9fr4EDB6p169basmWLnn76af3bv/1bncQJgLpFoABNWGRkZJMJhMbmcDhUUFCg559/Xh6PRx06dNDdd9/Nd0oAQxEoAFqEK664Qm+99VZjjwHgHPFjxgAAwDgECgAAMA6BAhju1C+s++677xp5EpzNqX9GP7yvCoALw79FgOG6du0qSXrnnXcaeRKczal/RqduIgfgwvElWcBwbdq0UUZGhn7+859Lkq677joFBQU18lT4oe+++07vvPOOfv7znys5OVnBwcH8Hh/gIhEoQBPw+9//XpZladKkSY09CmqRnJys0aNHS5K8Xq9CQkIaeSKg6eJOskATsn79em3cuFHt27c/7RfkofHY7XZFRET4zpxUVFSovLxcd9xxhy699NLGHg9okvgbDmhCBg8erPLycu3bt49LCAaprq7W4cOHfc+DgoI0YMAAdevWrRGnApo2zqAATcyJEyd08OBBlZWVyev1NvY4+JFWrVqpY8eOateunWw2W2OPAzRZBAoAADAOP2YMAACMQ6AAAADjECgAAMA4BAoAADAOgQIAAIxDoAAAAOMQKAAAwDgECgAAMA6BAgAAjEOgAAAA49QaKIcPH9a9996rTp06KTw8XNdee60KCgp86zdt2qSrrrpKISEh6tGjh1588cV6HxgAADR/tQbKww8/rJKSEn388cc6cuSI7rjjDt18880qKyvTF198oZtvvlkTJkzQ0aNHtWjRIj3++OPKzc1tqNkBAEAzVesvC4yPj9e4ceP0yCOPSJK+/fZbhYaG6oMPPtBf//pX5ebm6sMPP/RtP2XKFO3YsUNvvPFG/U8OAACarVrPoEybNk2rV6/Wl19+qRMnTig7O1u9evVS3759tW3bNg0YMMBv+8TERH300Uf1OjAAAGj+Amtbee2112rZsmWKjIxUYGCgwsPDtXr1agUHB8vj8ah3795+24eFhcnj8ZxxX2VlZcrPz1d0dLSCg4Pr7ggAAECTVlVVpf3792vIkCFyuVySagkUy7I0bNgwDR06VG63W6GhoXrttdeUkpKi/Px8OZ1OlZWV+b3G7XbL6XSecX/5+fn66U9/WoeHAwAAmpM1a9botttuk1RLoLjdbn3++edatWqV2rZtK0m69dZb1aNHD/3tb39TfHz8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FAAAYBwCBQAAGIdAAQAAxiFQAACAcQgUAABgHAIFAAAYh0ABAADGIVAAAIBxCBQAAGAcAgUAABiHQAEAAMYhUAAAgHEIFAAAYBwCBQAAGIdAAQAAxiFQAACAcQgUAABgHAIFAAAYh0ABAADGIVAAAIBxCBQAAGAcAgUAABiHQAEAAMYhUAAAgHEIFAAAYJxzDpTbb79ddrtdb775pm/Zpk2bdNVVVykkJEQ9evTQiy++WC9DAgCAluWcAmXp0qWqrKyUzWbzLfviiy908803a8KECTp69KgWLVqkxx9/XLm5ufU2LAAAaBnOGigHDhzQk08+qQULFsiyLN/yJUuWqHfv3nrooYcUGBiowYMHa+zYscrOzq7XgQEAQPN31kAZN26cnnjiCUVFRfkt37ZtmwYMGOC3LDExUR999FHdTggAAFqcWgPl+eefl/SvSDnl1GUej8cjl8vlt31YWJg8Hk9dzwgAAFqYwJpW7N27V7Nnz9YHH3zgt/zUZR6n06mysjK/dW63W06ns9Y3zMzM9NsmLS1NaWlp5z04AABomnJycpSTk+N7fqaTGzUGyttvv63S0lJdddVVft89ueOOO3TXXXcpISFBa9as8XtNYWGhEhISah0qKytLsbGx53wQAACgefnxyYni4mLl5eX5bVNjoNx1110aPny437KoqCj96U9/0vDhw+XxePT0009r3rx5Gjt2rDZv3qxFixZp8eLFdXsUAACgxakxUFq3bq3IyEi/ZTabTREREXK5XHK5XHr99dc1efJkTZkyRR07dtScOXN022231fvQAACgeasxUM6kurra7/ngwYO1devWOh0IAACAW90DAADjECgAAMA4BAoAADAOgQIAAIxDoAAAAOMQKAAAwDgECgAAMA6BAgAAjEOgAAAA4xAoAADAOAQKAAAwDoECAACMQ6AAAADjECgAAMA4BAoAADAOgQIAAIxDoAAAAOMQKAAAwDgECgAAMA6BAgAAjEOgAAAA4xAoAADAOAQKAAAwDoECAACMQ6AAAADjECgAAMA4BAoAADAOgQIAAIxDoAAAAOMQKAAAwDgECgAAMA6BAgAAjEOgAAAA4xAoAADAOAQKAAAwDoECAACMQ6AAAADj1BgoM2fOVM+ePeVyudShQwelpKSoqKjIb5vt27dryJAhcjgcioqK0owZM+p9YAAA0PzVGCj33HOP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WbLZbPU4GXDuNm3apIEDB6pz587avHmzPB6Ptm3bpuHDh+vVV19VZWWlrrvuOv31r3/V/Pnz5Xa7dfDgQc2ZM0crV65s7PHRAp3tMyupxr9j+bu3jl3ojdpQfwoLCy273W7l5eVZwcHB1vLly33rhg4daj3xxBN+23fv3t1asGCBZVmWFRISYtntdsvhcFihoaHWww8/bFmWZZWVlVkTJkywoqKirPbt21sjR460du3a1XAHhRapd+/e1n333Vfj+l/96ldWRESEdeTIkYYbCqjF2T6zixcvtqKjo09bvmnTJstut1vV1dX1OF3LwhkUAz333HOKj4/XiBEjdPvtt+v5558/59cWF//rN21u375dHo/H99rRo0frs88+09atW7Vv3z5ddtllSkpK4jdPo97s2bNHn376qcaMGVPjNq+//rpSUlIUHh7egJMBZ3Yun9maWPxAbJ0jUAxTVlamV155RQ8++KAk6T/+4z/0/vvva8eOHee1nx/+y/Lll19q/fr1mjt3rtq3b6/WrVvrt7/9rY4dO6bXXnutTucHTjl8+LBsNpuioqJq3aa29UBDOpfPrCSVlJQoPDzc73HLLbc00JQtB4FimIULF8put+vee++VJA0dOlQ9evQ4r7MoP7Z//37ZbDbFxMT4lgUGBqpbt27at2/fRc8MnEmHDh1kWZYOHDhQ6za1rQca0rl8ZiWpS5cuKi0t9XvwH3t1j0AxzLx58/Tdd9/psssuU+fOnRUZGamSkhItX75c5eXlCg0N1bfffuvb/uTJkzp8+LDvud1uP+1U46lvnH/22We+ZdXV1dq3b5+6du1az0eElqpnz5667LLLtGzZshq3uemmm7Rhwwa53e4GnAw4s3P5zKLhECgG+dvf/qY9e/bojTfe0LZt21RUVOR7SNKSJUvUv39/rV27VocOHdKxY8f0i1/8QidPnvTto3379goICNCuXbt8yzp16qSRI0cqMzNThw8f1rFjx/TYY48pODhYN910U4MfJ1qOefPmKScnR48++qjvbF15ebmWLVumJ554QpMnT1a3bt2UkpKi999/X1VVVfJ6vdq8ebNGjhzZyNOjJTrbZxYNh0AxyIsvvqjhw4dr8ODB6tChg+/Rs2dPjRs3Ti+++KKmTJmifv366fLLL9fll1+uXr16qUuXLr59tG7dWr/+9a81btw4hYeHKz09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\" class=\"pd_save is-viewer-good\">"
},
"output_type": "display_data",
"metadata": {}
}
],
"cell_type": "code",
"source": "from pixiedust.display import *\ndisplay(merged)"
},
{
"execution_count": 9,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": " ID Gender Status Children EstIncome CarOwner Age LongDistance \\\n0 61 M S 2 100020.0 N 50.000000 21.37 \n1 79 F S 0 98716.3 N 55.660000 20.97 \n2 87 M M 1 97180.4 N 50.600000 8.21 \n3 109 M S 1 92647.5 N 56.046667 16.04 \n4 148 M M 2 91272.2 Y 25.033333 26.99 \n\n International Local Dropped Paymethod LocalBilltype \\\n0 0.00 293.24 0 CH Budget \n1 8.23 13.92 0 CC FreeLocal \n2 9.63 45.66 0 CC FreeLocal \n3 5.74 10.34 0 CC Budget \n4 0.00 13.01 0 CC FreeLocal \n\n LongDistanceBilltype Usage RatePlan CHURN \n0 Standard 314.62 4 T \n1 Standard 43.13 4 T \n2 Standard 63.51 4 T \n3 Standard 32.13 4 T \n4 Standard 40.00 3 F ",
"text/html": "<div>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>ID</th>\n <th>Gender</th>\n <th>Status</th>\n <th>Children</th>\n <th>EstIncome</th>\n <th>CarOwner</th>\n <th>Age</th>\n <th>LongDistance</th>\n <th>International</th>\n <th>Local</th>\n <th>Dropped</th>\n <th>Paymethod</th>\n <th>LocalBilltype</th>\n <th>LongDistanceBilltype</th>\n <th>Usage</th>\n <th>RatePlan</th>\n <th>CHURN</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>61</td>\n <td>M</td>\n <td>S</td>\n <td>2</td>\n <td>100020.0</td>\n <td>N</td>\n <td>50.000000</td>\n <td>21.37</td>\n <td>0.00</td>\n <td>293.24</td>\n <td>0</td>\n <td>CH</td>\n <td>Budget</td>\n <td>Standard</td>\n <td>314.62</td>\n <td>4</td>\n <td>T</td>\n </tr>\n <tr>\n <th>1</th>\n <td>79</td>\n <td>F</td>\n <td>S</td>\n <td>0</td>\n <td>98716.3</td>\n <td>N</td>\n <td>55.660000</td>\n <td>20.97</td>\n <td>8.23</td>\n <td>13.92</td>\n <td>0</td>\n <td>CC</td>\n <td>FreeLocal</td>\n <td>Standard</td>\n <td>43.13</td>\n <td>4</td>\n <td>T</td>\n </tr>\n <tr>\n <th>2</th>\n <td>87</td>\n <td>M</td>\n <td>M</td>\n <td>1</td>\n <td>97180.4</td>\n <td>N</td>\n <td>50.600000</td>\n <td>8.21</td>\n <td>9.63</td>\n <td>45.66</td>\n <td>0</td>\n <td>CC</td>\n <td>FreeLocal</td>\n <td>Standard</td>\n <td>63.51</td>\n <td>4</td>\n <td>T</td>\n </tr>\n <tr>\n <th>3</th>\n <td>109</td>\n <td>M</td>\n <td>S</td>\n <td>1</td>\n <td>92647.5</td>\n <td>N</td>\n <td>56.046667</td>\n <td>16.04</td>\n <td>5.74</td>\n <td>10.34</td>\n <td>0</td>\n <td>CC</td>\n <td>Budget</td>\n <td>Standard</td>\n <td>32.13</td>\n <td>4</td>\n <td>T</td>\n </tr>\n <tr>\n <th>4</th>\n <td>148</td>\n <td>M</td>\n <td>M</td>\n <td>2</td>\n <td>91272.2</td>\n <td>Y</td>\n <td>25.033333</td>\n <td>26.99</td>\n <td>0.00</td>\n <td>13.01</td>\n <td>0</td>\n <td>CC</td>\n <td>FreeLocal</td>\n <td>Standard</td>\n <td>40.00</td>\n <td>3</td>\n <td>F</td>\n </tr>\n </tbody>\n</table>\n</div>"
},
"execution_count": 9,
"output_type": "execute_result",
"metadata": {}
}
],
"cell_type": "code",
"source": "# Spark SQL also allow you to use standard SQL\nmerged.createOrReplaceTempView(\"merged\")\nsql = \"\"\"\nSELECT c.*\nFROM merged c\nWHERE c.EstIncome>90000\n\n\"\"\"\nspark.sql(sql).toPandas().head()"
},
{
"source": "### Step 6: Build the Spark pipeline and the Random Forest Classifier model\n\"Pipeline\" is an API in SparkML that's used for building models.\nAdditional information on SparkML: http://spark.apache.org/docs/latest/ml-guide.html",
"cell_type": "markdown",
"metadata": {}
},
{
"execution_count": 10,
"metadata": {},
"outputs": [],
"cell_type": "code",
"source": "from pyspark.ml.feature import StringIndexer, VectorIndexer\nfrom pyspark.ml import Pipeline\nfrom pyspark.ml.feature import VectorAssembler\nfrom pyspark.ml.classification import RandomForestClassifier\n\n# Prepare string variables so that they can be used by the decision tree algorithm\nstringIndexer1 = StringIndexer(inputCol='Gender', outputCol='GenderEncoded')\nstringIndexer2 = StringIndexer(inputCol='Status',outputCol='StatusEncoded')\nstringIndexer3 = StringIndexer(inputCol='CarOwner',outputCol='CarOwnerEncoded')\nstringIndexer4 = StringIndexer(inputCol='Paymethod',outputCol='PaymethodEncoded')\nstringIndexer5 = StringIndexer(inputCol='LocalBilltype',outputCol='LocalBilltypeEncoded')\nstringIndexer6 = StringIndexer(inputCol='LongDistanceBilltype',outputCol='LongDistanceBilltypeEncoded')\nstringIndexer7 = StringIndexer(inputCol='CHURN', outputCol='label')\n\n# Pipelines API requires that input variables are passed in a vector\nassembler = VectorAssembler(inputCols=[\"GenderEncoded\", \"StatusEncoded\", \"CarOwnerEncoded\", \"PaymethodEncoded\", \"LocalBilltypeEncoded\", \\\n \"LongDistanceBilltypeEncoded\", \"Children\", \"EstIncome\", \"Age\", \"LongDistance\", \"International\", \"Local\",\\\n \"Dropped\",\"Usage\",\"RatePlan\"], outputCol=\"features\")\n\n\n# instantiate the algorithm, take the default settings\nrf=RandomForestClassifier(labelCol=\"label\", featuresCol=\"features\")\n\n#pipeline = Pipeline(stages=[stringIndexer1, stringIndexer2, stringIndexer3, assembler, rf])\npipeline = Pipeline(stages=[stringIndexer1,stringIndexer2,stringIndexer3,stringIndexer4,stringIndexer5,stringIndexer6,stringIndexer7, assembler, rf])\n"
},
{
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": "DataFrame[ID: int, Gender: string, Status: string, Children: double, EstIncome: double, CarOwner: string, Age: double, LongDistance: double, International: double, Local: double, Dropped: double, Paymethod: string, LocalBilltype: string, LongDistanceBilltype: string, Usage: double, RatePlan: double, CHURN: string]"
},
"execution_count": 11,
"output_type": "execute_result",
"metadata": {}
}
],
"cell_type": "code",
"source": "# Split data into train and test datasets\n(trainingData, testingData) = merged.randomSplit([0.7, 0.3],seed=9)\ntrainingData.cache()\ntestingData.cache()"
},
{
"execution_count": 12,
"metadata": {},
"outputs": [],
"cell_type": "code",
"source": "# Build model\nmodel = pipeline.fit(trainingData)"
},
{
"source": "### Step 7: Score the test data set",
"cell_type": "markdown",
"metadata": {
"collapsed": true
}
},
{
"execution_count": 13,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": " ID CHURN Label prediction probability\n0 1 T 1 1 [0.0390066830438, 0.960993316956]\n1 18 F 0 0 [0.604568153513, 0.395431846487]\n2 22 F 0 0 [0.743416529489, 0.256583470511]\n3 23 F 0 0 [0.92480094066, 0.0751990593396]\n4 29 T 1 1 [0.134435036135, 0.865564963865]\n5 40 T 1 1 [0.222010772111, 0.777989227889]",
"text/html": "<div>\n<table border=\"1\" class=\"dataframe\">\n <thead>\n <tr style=\"text-align: right;\">\n <th></th>\n <th>ID</th>\n <th>CHURN</th>\n <th>Label</th>\n <th>prediction</th>\n <th>probability</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <th>0</th>\n <td>1</td>\n <td>T</td>\n <td>1</td>\n <td>1</td>\n <td>[0.0390066830438, 0.960993316956]</td>\n </tr>\n <tr>\n <th>1</th>\n <td>18</td>\n <td>F</td>\n <td>0</td>\n <td>0</td>\n <td>[0.604568153513, 0.395431846487]</td>\n </tr>\n <tr>\n <th>2</th>\n <td>22</td>\n <td>F</td>\n <td>0</td>\n <td>0</td>\n <td>[0.743416529489, 0.256583470511]</td>\n </tr>\n <tr>\n <th>3</th>\n <td>23</td>\n <td>F</td>\n <td>0</td>\n <td>0</td>\n <td>[0.92480094066, 0.0751990593396]</td>\n </tr>\n <tr>\n <th>4</th>\n <td>29</td>\n <td>T</td>\n <td>1</td>\n <td>1</td>\n <td>[0.134435036135, 0.865564963865]</td>\n </tr>\n <tr>\n <th>5</th>\n <td>40</td>\n <td>T</td>\n <td>1</td>\n <td>1</td>\n <td>[0.222010772111, 0.777989227889]</td>\n </tr>\n </tbody>\n</table>\n</div>"
},
"execution_count": 13,
"output_type": "execute_result",
"metadata": {}
}
],
"cell_type": "code",
"source": "result=model.transform(testingData)\nresult_display=result.select(result[\"ID\"],result[\"CHURN\"],result[\"Label\"],result[\"prediction\"],result[\"probability\"])\nresult_display.toPandas().head(6)"
},
{
"source": "### Step 8: Model Evaluation\nFind accuracy of the models and the Area Under the ROC Curve ",
"cell_type": "markdown",
"metadata": {}
},
{
"execution_count": 14,
"metadata": {},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": "Model Accuracy = 0.92.\n"
}
],
"cell_type": "code",
"source": "print 'Model Accuracy = {:.2f}.'.format(result.filter(result.label == result.prediction).count() / float(result.count()))"
},
{
"execution_count": 15,
"metadata": {},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": "Area under ROC curve = 0.91.\n"
}
],
"cell_type": "code",
"source": "from pyspark.ml.evaluation import BinaryClassificationEvaluator\n\n# Evaluate model\nevaluator = BinaryClassificationEvaluator(rawPredictionCol=\"prediction\", labelCol=\"label\", metricName=\"areaUnderROC\")\nprint 'Area under ROC curve = {:.2f}.'.format(evaluator.evaluate(result))"
},
{
"source": "### Step 9: Tune the model to find the best model",
"cell_type": "markdown",
"metadata": {}
},
{
"source": "#### Build a Parameter Grid specifying the parameters to be evaluated to determine the best combination",
"cell_type": "markdown",
"metadata": {}
},
{
"execution_count": 16,
"metadata": {},
"outputs": [],
"cell_type": "code",
"source": "# set different levels for the maxDepth\nfrom pyspark.ml.tuning import ParamGridBuilder, CrossValidator\nparamGrid = (ParamGridBuilder().addGrid(rf.maxDepth,[4,6,8]).build())"
},
{
"source": "#### Create a cross validator to tune the pipeline with the generated parameter grid\nCross-validation attempts to fit the underlying estimator with user-specified combinations of parameters, cross-evaluate the fitted models, and output the best one.",
"cell_type": "markdown",
"metadata": {}
},
{
"execution_count": 17,
"metadata": {
"collapsed": true
},
"outputs": [],
"cell_type": "code",
"source": "# perform 3 fold cross validation\ncv = CrossValidator().setEstimator(pipeline).setEvaluator(evaluator).setEstimatorParamMaps(paramGrid).setNumFolds(3)"
},
{
"execution_count": 18,
"metadata": {},
"outputs": [],
"cell_type": "code",
"source": "# train the model\ncvModel = cv.fit(trainingData)\n\n# pick the best model\nbest_rfModel = cvModel.bestModel\n\n# score the test data set\ncvresult=best_rfModel.transform(testingData)"
},
{
"execution_count": 19,
"metadata": {},
"outputs": [
{
"output_type": "stream",
"name": "stdout",
"text": "Model Accuracy of the best fitted model = 0.97.\nModel Accuracy of the default model = 0.92.\n \nArea under the ROC curve of best fitted model = 0.96.\nArea under the ROC curve of the default model = 0.91.\n"
}
],
"cell_type": "code",
"source": "\nprint 'Model Accuracy of the best fitted model = {:.2f}.'.format(cvresult.filter(cvresult.label == cvresult.prediction).count()/ float(cvresult.count()))\nprint 'Model Accuracy of the default model = {:.2f}.'.format(result.filter(result.label == result.prediction).count() / float(result.count()))\nprint ' '\nprint('Area under the ROC curve of best fitted model = {:.2f}.'.format(evaluator.evaluate(cvresult)))\nprint 'Area under the ROC curve of the default model = {:.2f}.'.format(evaluator.evaluate(result))"
},
{
"source": "### Step 10: Save Model\nSave the best model in Object Storage. \n\nA separate notebook has been created for \"batch scoring deployment\". This deployment notebook retrieves the model from object storage and applies it to a new dataset. The notebook can be scheduled to run via the Notebook scheduler (the clock icon on the menu bar) or through the deployment interface in IBM ML (currently in beta).",
"cell_type": "markdown",
"metadata": {}
},
{
"execution_count": 20,
"metadata": {},
"outputs": [],
"cell_type": "code",
"source": "# Overwrite any existing saved model in the specified path\nbest_rfModel.write().overwrite().save(\"PredictChurn.churnModel\")"
},
{
"source": "You have come to the end of this notebook",
"cell_type": "markdown",
"metadata": {
"collapsed": true
}
},
{
"source": "**Sidney Phoon**<br/>\nyfphoon@us.ibm.com <br/>\nMay 4th, 2017",
"cell_type": "markdown",
"metadata": {}
},
{
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"cell_type": "code",
"source": ""
}
],
"metadata": {
"language_info": {
"pygments_lexer": "ipython2",
"mimetype": "text/x-python",
"version": "2.7.11",
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"name": "python",
"file_extension": ".py",
"nbconvert_exporter": "python"
},
"kernelspec": {
"language": "python",
"display_name": "Python 2 with Spark 2.0",
"name": "python2-spark20"
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment