Udemy 课程数据可视化 | Pandas & Echarts & Echarts-wordcloud

对 Udemy 在线网络课程进行数据分析与可视化展现,数据包含了2011年到2017年的所有课程数据,每个课程数据包含了课程名称、价格、学科、评论数量、订阅数量等信息。用到了 pandas 和 echarts。

数据来源: Udemy Courses - Kaggle


开发流程

利用 Jupyter Notebook 对数据进行预处理、EDA和导出数据

  1. 加载数据,查看数据基本信息,必要的数据预处理部分
  2. 探索性数据分析,设定问题,找出数据包含的信息、
  3. 同步与可视乎阶段进行,根据 Echarts 配置参数中 data 等属性的需要,用 Python 导出合适的 JavaScript 数组/对象 数据,方便 Echarts 使用

利用 Echarts库 编写可视化组件

  1. 新建 HTML 文件 index.html,初始化基本信息,引入必要的 JS 库
  2. 确定可视化组件的内容,确定布局位置,这些都在 HTML 文件中完成
  3. 新建 main.js 文件,使用 echart 配置各种所需图表,为了整洁型,封装成函数
  4. 需要的数据全部封装到 data.js 文件中,方便 main.js 引用
  5. 反复打开 index.html 进行测试,确保功能都正常显示

可视化组件

  • 课程 免费/付费 数量,饼图
  • 各类别课程 免费/付费 数量 柱状图
  • 各类别课程的价格分布
  • 各等级 免费/付费 数量
  • 价格的 cdf、柱状图、BOX图分布
  • 各年份的各类别发布量
  • 各课程类别的课程关键字云图

运行

直接浏览器打开 index.html 文件即可,支持 file 协议。

源码

源数据有 3684 条,因此 data.js 文件比较大

index.html





    
    
    

    
    
    
    Udemy 课程数据可视化




    

    

main.js

/** udemy 课程数据可视化 公共 js 文件 */

/** Echarts Dom 操作 */

/** 课程 免费/付费 数量,饼图  */
function echart_1() {
    let el = 'echart-1'
    let pieChart = echarts.init(document.getElementById(el))
    let option = {
        title: {
            left: '20%',
            text: '免费/付费 课程数量对比'
        },
        tooltip: {
            trigger: 'axis',
            axisPointer: {            // 坐标轴指示器,坐标轴触发有效
                type: 'shadow'        // 默认为直线,可选为:'line' | 'shadow'
            }
        },
        legend: {},
        series: [
            {
                name: '在线课程数量',
                type: 'pie',
                radius: ['50%', '75%'],
                avoidLabelOverlap: false,
                label: {
                    show: false,
                    position: 'center'
                },
                emphasis: {
                    label: {
                        show: true,
                        fontSize: 30,
                        fontWeight: 'bold'
                    }
                },
                labelLine: {
                    show: false
                },
                data: [
                    { value: 3544, name: '付费课程' },
                    { value: 600, name: '免费课程' }
                ]
            }
        ],
    }
    pieChart.setOption(option)
}

/** 各类别课程 免费/付费 数量 柱状图 */
function echart_2() {
    let el = 'echart-2'
    let chart = echarts.init(document.getElementById(el))
    let option = {
        title: {
            left: '20%',
            text: '各主题的 免费/付费 课程数量'
        },
        legend: {},
        tooltip: {
            trigger: 'axis',
            axisPointer: {            // 坐标轴指示器,坐标轴触发有效
                type: 'shadow'        // 默认为直线,可选为:'line' | 'shadow'
            }
        },
        xAxis: [
            {
                type: 'category',
                name: '主题',
                data: ['Business Finance', 'Graphic Design', 'Musical Instruments', 'Web Development']
            }
        ],
        yAxis: [
            {
                type: 'value',
                name: '数量'
            }
        ],
        series: [
            {
                name: '付费',
                type: 'bar',
                data: [1099, 568, 634, 1067],
                markPoint: {
                    data: [
                        {type: 'max', name: '最大值'},
                        {type: 'min', name: '最小值'}
                    ]
                }
            },
            {
                name: '免费',
                type: 'bar',
                data: [96, 35, 46, 133],
                markPoint: {
                    data: [
                        { type: 'max', name: '最大值' },
                        { type: 'min', name: '最小值' }
                    ]
                }
            }
        ],

    }
    chart.setOption(option)
}

/** 各类别课程的价格分布 */
function echart_3() {
    let el = 'echart-3'
    let chart = echarts.init(document.getElementById(el))
    let data = SUBJECT_PRICE_COUNT_ARRAY.map( ls => [ls[1], ls[0], ls[2]] )
    let option = {
        title: {
            left: 'center',
            text: '各主题课程的价格分布'
        },
        // legend: {},
        tooltip: {
            trigger: 'item',
            axisPointer: {            // 坐标轴指示器,坐标轴触发有效
                type: 'shadow'        // 默认为直线,可选为:'line' | 'shadow'
            }
        },
        xAxis: {
            type: 'category',
            data: SUBJECT_PRICE_COUNT["price"],
            name: '价格',
            axisLine: {
                show: false
            }
        },
        yAxis: [
            {
                type: 'category',
                data: SUBJECTS,
                axisLine: {
                    show: false
                },
                boundaryGap: false,
                splitLine: {
                    show: true,
                    lineStyle: {
                        color: '#999',
                        type: 'dashed'
                    }
                },
                name: '主题'
            },
            
        ],
        series: [
            {
                name: '课程数量',
                type: 'scatter',
                areaStyle: {},
                data: data,
                symbolSize: function (val) {
                    // return Math.log2(val[2]) * 6;
                    return val[2] / 3
                },
                animationDelay: function (idx) {
                    return idx * 5;
                },
                tooltip: {
                    // formatter: '价格: {a} {b} 
个数:{c[2]}' } }, ], } // option.xAxis.data = subject_price_counts.price // option.series[0].data = subject_price_counts["Business Finance"] // option.series[1].data = subject_price_counts["Graphic Design"] chart.setOption(option) } /** 各等级 免费/付费 数量 */ function echart_4() { let el = 'echart-4' let chart = echarts.init(document.getElementById(el)) let option = { title: { left: '20%', text: '各课程难度的 免费/付费 课程数量' }, tooltip: { trigger: 'axis', axisPointer: { // 坐标轴指示器,坐标轴触发有效 type: 'shadow' // 默认为直线,可选为:'line' | 'shadow' } }, legend: {}, xAxis: [ { type: 'category', data: ['All Levels', 'Beginner Level', 'Intermediate Level', 'Expert Level'], name: '课程难度' } ], yAxis: [ { type: 'value', name: '数量' } ], series: [ { name: '付费', type: 'bar', data: [1807, 1112, 391, 58,], markPoint: { data: [ { type: 'max', name: '最大值' }, { type: 'min', name: '最小值' } ] } }, { name: '免费', type: 'bar', data: [122, 158, 30, 0], markPoint: { data: [ { type: 'max', name: '最大值' }, { type: 'min', name: '最小值' } ] } } ], } chart.setOption(option) } /** 价格的 cdf 柱状图 BOX图分布 */ function echart_5() { let el = 'echart-5' let chart = echarts.init(document.getElementById(el)) let data = PRICE_CDF.x.map( (n, i) => [n, PRICE_CDF.y[i]]) let option = { title: { left: '20%', text: '在线课程的价格分布如何' }, legend: {}, tooltip: { trigger: 'axis', axisPointer: { // 坐标轴指示器,坐标轴触发有效 type: 'shadow' // 默认为直线,可选为:'line' | 'shadow' } }, grid: [ { x: '5%', width: '25%'}, { x: '30%', width: '40%'}, { x: '75%', width: '20%'}, ], xAxis: [ { type: 'category', data: SUBJECT_PRICE_COUNT.price, gridIndex: 0, name: '价格' }, { type: 'category', data: PRICE_COUNT.x, gridIndex: 1, name: '价格区间' }, { type: 'category', data: ['价格'], splitArea: { show: false }, splitLine: { show: false }, gridIndex: 2, } ], yAxis: [ { type: 'value', gridIndex: 0, name: '占总百分比' }, { type: 'value', gridIndex: 1, name: '数量' }, { type: 'value', gridIndex: 2, name: '价格' } ], series: [ { name: 'CDF 指数', type: 'line', data: data, // symbol: 'none', xAxisIndex: 0, yAxisIndex: 0 }, { name: '普通统计 指数', type: 'bar', data: PRICE_COUNT.y, xAxisIndex: 1, yAxisIndex: 1 }, { name:'四分位 指数', type: 'boxplot', data: [ [0.0, 20.0, 45.0, 95.0, 200.0] ], xAxisIndex: 2, yAxisIndex: 2 } ], } chart.setOption(option) } /** 各年份的 各 类别发布量 */ function echart_6() { let el = 'echart-6' let chart = echarts.init(document.getElementById(el)) let option = { tooltip: { trigger: 'axis', axisPointer: { // 坐标轴指示器,坐标轴触发有效 type: 'shadow' // 默认为直线,可选为:'line' | 'shadow' } }, legend: {}, title: { left: '10%', text: '各主题课程最近几年的发布量' }, xAxis: [ { type: 'value', name: '发布量' }, ], yAxis: [ { type: 'category', data: SUBJECT_YEAR_COUNT.year, name: '主题' }, ], series: [ { name: "Web Development", type: 'bar', stack: '总量', data: SUBJECT_YEAR_COUNT["Web Development"], label: { show: true, position: 'insideRight' } }, { name: "Business Finance", type: 'bar', stack: '总量', data: SUBJECT_YEAR_COUNT["Business Finance"] , label: { show: true, position: 'insideRight' }, }, { name: "Graphic Design", type: 'bar', stack: '总量', data: SUBJECT_YEAR_COUNT["Graphic Design"], label: { show: true, position: 'insideRight' }, }, { name: "Musical Instruments", type: 'bar', stack: '总量', data: SUBJECT_YEAR_COUNT["Musical Instruments"], label: { show: true, position: 'insideRight' }, }, ], } chart.setOption(option) } function create_wordclound(el, title, data){ let chart = echarts.init(document.getElementById(el)) let option = { title: { left: 'center', text: title, }, series: [ { type: 'wordCloud', shape: 'circle', // maskImage: maskImage, left: 'center', top: 'center', width: '70%', height: '85%', sizeRange: [12, 60], rotationRange: [-90, 90], rotationStep: 45, gridSize: 8, drawOutOfBound: false, textStyle: { normal: { fontFamily: 'sans-serif', fontWeight: 'bold', // Color can be a callback function or a color string color: function () { // Random color return 'rgb(' + [ Math.round(Math.random() * 160), Math.round(Math.random() * 160), Math.round(Math.random() * 160) ].join(',') + ')'; } }, emphasis: { shadowBlur: 10, shadowColor: '#333' } }, data: data }, ], } chart.setOption(option) } /** 各课程类别的 课程 关键字云图 */ function echart_7() { create_wordclound('echart-7-1', 'Web Development 主题的关键字分布', SUBJECT_WORD_COUNT["Web Development"]) create_wordclound('echart-7-2', 'Business Finance 主题的关键字分布', SUBJECT_WORD_COUNT["Business Finance"]) create_wordclound('echart-7-3', 'Graphic Design 主题的关键字分布', SUBJECT_WORD_COUNT["Graphic Design"]) create_wordclound('echart-7-4', 'Musical Instruments 主题的关键字分布', SUBJECT_WORD_COUNT["Musical Instruments"]) } function initAllCharts() { echart_1() echart_2() echart_3() echart_4() echart_5() echart_6() echart_7() } initAllCharts()

data.js 

/** 数据 */

const NUM_IS_PAID = {
    columns: ['true', 'false'],
    values: [
        [3544, 600]
    ]
}

const SUBJECT_PRICE_COUNT = { "Business Finance": [96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 299, 0, 0, 0, 0, 54, 0, 0, 0, 0, 49, 0, 0, 0, 0, 29, 0, 0, 0, 0, 50, 0, 0, 0, 0, 23, 0, 0, 0, 0, 163, 0, 0, 0, 0, 7, 0, 0, 0, 0, 33, 0, 0, 0, 0, 4, 0, 0, 0, 0, 4, 0, 0, 0, 0, 19, 0, 0, 0, 0, 6, 0, 0, 0, 0, 6, 0, 0, 0, 0, 8, 0, 0, 0, 0, 52, 0, 0, 0, 0, 27, 0, 0, 0, 0, 5, 0, 0, 0, 0, 1, 0, 0, 0, 0, 5, 0, 0, 0, 0, 9, 0, 0, 0, 0, 13, 0, 0, 0, 0, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 4, 0, 0, 0, 0, 9, 0, 0, 0, 0, 32, 0, 0, 0, 0, 1, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 10, 0, 0, 0, 0, 2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 33, 0, 0, 0, 0, 128], "Graphic Design": [35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 203, 0, 0, 0, 0, 36, 0, 0, 0, 0, 44, 0, 0, 0, 0, 20, 0, 0, 0, 0, 26, 0, 0, 0, 0, 14, 0, 0, 0, 0, 41, 0, 0, 0, 0, 5, 0, 0, 0, 0, 4, 0, 0, 0, 0, 6, 0, 0, 0, 0, 6, 0, 0, 0, 0, 8, 0, 0, 0, 0, 6, 0, 0, 0, 0, 4, 0, 0, 0, 0, 4, 0, 0, 0, 0, 23, 0, 0, 0, 0, 23, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 4, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 15, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 3, 0, 0, 0, 0, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 17, 0, 0, 0, 0, 35], "Musical Instruments": [46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 141, 0, 0, 0, 0, 29, 0, 0, 0, 0, 30, 0, 0, 0, 0, 33, 0, 0, 0, 0, 78, 0, 0, 0, 0, 23, 0, 0, 0, 0, 143, 0, 0, 0, 0, 11, 0, 0, 0, 0, 13, 0, 0, 0, 0, 7, 0, 0, 0, 0, 10, 0, 0, 0, 0, 15, 0, 0, 0, 0, 6, 0, 0, 0, 0, 7, 0, 0, 0, 0, 1, 0, 0, 0, 0, 22, 0, 0, 0, 0, 16, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 4, 0, 0, 0, 0, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 19], "Web Development": [133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 187, 0, 0, 0, 0, 35, 0, 0, 0, 0, 43, 0, 0, 0, 0, 34, 0, 0, 0, 0, 63, 0, 0, 0, 0, 23, 0, 0, 0, 0, 121, 0, 0, 0, 0, 12, 0, 0, 0, 0, 25, 0, 0, 0, 0, 13, 0, 0, 0, 0, 6, 0, 0, 0, 0, 39, 0, 0, 0, 0, 11, 0, 0, 0, 0, 14, 0, 0, 0, 0, 6, 0, 0, 0, 0, 55, 0, 0, 0, 0, 67, 0, 0, 0, 0, 2, 0, 0, 0, 0, 7, 0, 0, 0, 0, 7, 0, 0, 0, 0, 20, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 5, 0, 0, 0, 0, 14, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 3, 0, 0, 0, 0, 2, 0, 0, 0, 0, 8, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 6, 0, 0, 0, 0, 72, 0, 0, 0, 0, 113], "price": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200] }

const SUBJECT_PRICE_COUNT_ARRAY = [[0, 0, 96], [0, 1, 0], [0, 2, 0], [0, 3, 0], [0, 4, 0], [0, 5, 0], [0, 6, 0], [0, 7, 0], [0, 8, 0], [0, 9, 0], [0, 10, 0], [0, 11, 0], [0, 12, 0], [0, 13, 0], [0, 14, 0], [0, 15, 0], [0, 16, 0], [0, 17, 0], [0, 18, 0], [0, 19, 0], [0, 20, 299], [0, 21, 0], [0, 22, 0], [0, 23, 0], [0, 24, 0], [0, 25, 54], [0, 26, 0], [0, 27, 0], [0, 28, 0], [0, 29, 0], [0, 30, 49], [0, 31, 0], [0, 32, 0], [0, 33, 0], [0, 34, 0], [0, 35, 29], [0, 36, 0], [0, 37, 0], [0, 38, 0], [0, 39, 0], [0, 40, 50], [0, 41, 0], [0, 42, 0], [0, 43, 0], [0, 44, 0], [0, 45, 23], [0, 46, 0], [0, 47, 0], [0, 48, 0], [0, 49, 0], [0, 50, 163], [0, 51, 0], [0, 52, 0], [0, 53, 0], [0, 54, 0], [0, 55, 7], [0, 56, 0], [0, 57, 0], [0, 58, 0], [0, 59, 0], [0, 60, 33], [0, 61, 0], [0, 62, 0], [0, 63, 0], [0, 64, 0], [0, 65, 4], [0, 66, 0], [0, 67, 0], [0, 68, 0], [0, 69, 0], [0, 70, 4], [0, 71, 0], [0, 72, 0], [0, 73, 0], [0, 74, 0], [0, 75, 19], [0, 76, 0], [0, 77, 0], [0, 78, 0], [0, 79, 0], [0, 80, 6], [0, 81, 0], [0, 82, 0], [0, 83, 0], [0, 84, 0], [0, 85, 6], [0, 86, 0], [0, 87, 0], [0, 88, 0], [0, 89, 0], [0, 90, 8], [0, 91, 0], [0, 92, 0], [0, 93, 0], [0, 94, 0], [0, 95, 52], [0, 96, 0], [0, 97, 0], [0, 98, 0], [0, 99, 0], [0, 100, 27], [0, 101, 0], [0, 102, 0], [0, 103, 0], [0, 104, 0], [0, 105, 5], [0, 106, 0], [0, 107, 0], [0, 108, 0], [0, 109, 0], [0, 110, 1], [0, 111, 0], [0, 112, 0], [0, 113, 0], [0, 114, 0], [0, 115, 5], [0, 116, 0], [0, 117, 0], [0, 118, 0], [0, 119, 0], [0, 120, 9], [0, 121, 0], [0, 122, 0], [0, 123, 0], [0, 124, 0], [0, 125, 13], [0, 126, 0], [0, 127, 0], [0, 128, 0], [0, 129, 0], [0, 130, 2], [0, 131, 0], [0, 132, 0], [0, 133, 0], [0, 134, 0], [0, 135, 1], [0, 136, 0], [0, 137, 0], [0, 138, 0], [0, 139, 0], [0, 140, 4], [0, 141, 0], [0, 142, 0], [0, 143, 0], [0, 144, 0], [0, 145, 9], [0, 146, 0], [0, 147, 0], [0, 148, 0], [0, 149, 0], [0, 150, 32], [0, 151, 0], [0, 152, 0], [0, 153, 0], [0, 154, 0], [0, 155, 1], [0, 156, 0], [0, 157, 0], [0, 158, 0], [0, 159, 0], [0, 160, 3], [0, 161, 0], [0, 162, 0], [0, 163, 0], [0, 164, 0], [0, 165, 1], [0, 166, 0], [0, 167, 0], [0, 168, 0], [0, 169, 0], [0, 170, 2], [0, 171, 0], [0, 172, 0], [0, 173, 0], [0, 174, 0], [0, 175, 2], [0, 176, 0], [0, 177, 0], [0, 178, 0], [0, 179, 0], [0, 180, 10], [0, 181, 0], [0, 182, 0], [0, 183, 0], [0, 184, 0], [0, 185, 2], [0, 186, 0], [0, 187, 0], [0, 188, 0], [0, 189, 0], [0, 190, 3], [0, 191, 0], [0, 192, 0], [0, 193, 0], [0, 194, 0], [0, 195, 33], [0, 196, 0], [0, 197, 0], [0, 198, 0], [0, 199, 0], [0, 200, 128], [1, 0, 35], [1, 1, 0], [1, 2, 0], [1, 3, 0], [1, 4, 0], [1, 5, 0], [1, 6, 0], [1, 7, 0], [1, 8, 0], [1, 9, 0], [1, 10, 0], [1, 11, 0], [1, 12, 0], [1, 13, 0], [1, 14, 0], [1, 15, 0], [1, 16, 0], [1, 17, 0], [1, 18, 0], [1, 19, 0], [1, 20, 203], [1, 21, 0], [1, 22, 0], [1, 23, 0], [1, 24, 0], [1, 25, 36], [1, 26, 0], [1, 27, 0], [1, 28, 0], [1, 29, 0], [1, 30, 44], [1, 31, 0], [1, 32, 0], [1, 33, 0], [1, 34, 0], [1, 35, 20], [1, 36, 0], [1, 37, 0], [1, 38, 0], [1, 39, 0], [1, 40, 26], [1, 41, 0], [1, 42, 0], [1, 43, 0], [1, 44, 0], [1, 45, 14], [1, 46, 0], [1, 47, 0], [1, 48, 0], [1, 49, 0], [1, 50, 41], [1, 51, 0], [1, 52, 0], [1, 53, 0], [1, 54, 0], [1, 55, 5], [1, 56, 0], [1, 57, 0], [1, 58, 0], [1, 59, 0], [1, 60, 4], [1, 61, 0], [1, 62, 0], [1, 63, 0], [1, 64, 0], [1, 65, 6], [1, 66, 0], [1, 67, 0], [1, 68, 0], [1, 69, 0], [1, 70, 6], [1, 71, 0], [1, 72, 0], [1, 73, 0], [1, 74, 0], [1, 75, 8], [1, 76, 0], [1, 77, 0], [1, 78, 0], [1, 79, 0], [1, 80, 6], [1, 81, 0], [1, 82, 0], [1, 83, 0], [1, 84, 0], [1, 85, 4], [1, 86, 0], [1, 87, 0], [1, 88, 0], [1, 89, 0], [1, 90, 4], [1, 91, 0], [1, 92, 0], [1, 93, 0], [1, 94, 0], [1, 95, 23], [1, 96, 0], [1, 97, 0], [1, 98, 0], [1, 99, 0], [1, 100, 23], [1, 101, 0], [1, 102, 0], [1, 103, 0], [1, 104, 0], [1, 105, 3], [1, 106, 0], [1, 107, 0], [1, 108, 0], [1, 109, 0], [1, 110, 0], [1, 111, 0], [1, 112, 0], [1, 113, 0], [1, 114, 0], [1, 115, 1], [1, 116, 0], [1, 117, 0], [1, 118, 0], [1, 119, 0], [1, 120, 4], [1, 121, 0], [1, 122, 0], [1, 123, 0], [1, 124, 0], [1, 125, 3], [1, 126, 0], [1, 127, 0], [1, 128, 0], [1, 129, 0], [1, 130, 0], [1, 131, 0], [1, 132, 0], [1, 133, 0], [1, 134, 0], [1, 135, 4], [1, 136, 0], [1, 137, 0], [1, 138, 0], [1, 139, 0], [1, 140, 1], [1, 141, 0], [1, 142, 0], [1, 143, 0], [1, 144, 0], [1, 145, 2], [1, 146, 0], [1, 147, 0], [1, 148, 0], [1, 149, 0], [1, 150, 15], [1, 151, 0], [1, 152, 0], [1, 153, 0], [1, 154, 0], [1, 155, 1], [1, 156, 0], [1, 157, 0], [1, 158, 0], [1, 159, 0], [1, 160, 0], [1, 161, 0], [1, 162, 0], [1, 163, 0], [1, 164, 0], [1, 165, 2], [1, 166, 0], [1, 167, 0], [1, 168, 0], [1, 169, 0], [1, 170, 0], [1, 171, 0], [1, 172, 0], [1, 173, 0], [1, 174, 0], [1, 175, 1], [1, 176, 0], [1, 177, 0], [1, 178, 0], [1, 179, 0], [1, 180, 3], [1, 181, 0], [1, 182, 0], [1, 183, 0], [1, 184, 0], [1, 185, 2], [1, 186, 0], [1, 187, 0], [1, 188, 0], [1, 189, 0], [1, 190, 1], [1, 191, 0], [1, 192, 0], [1, 193, 0], [1, 194, 0], [1, 195, 17], [1, 196, 0], [1, 197, 0], [1, 198, 0], [1, 199, 0], [1, 200, 35], [2, 0, 46], [2, 1, 0], [2, 2, 0], [2, 3, 0], [2, 4, 0], [2, 5, 0], [2, 6, 0], [2, 7, 0], [2, 8, 0], [2, 9, 0], [2, 10, 0], [2, 11, 0], [2, 12, 0], [2, 13, 0], [2, 14, 0], [2, 15, 0], [2, 16, 0], [2, 17, 0], [2, 18, 0], [2, 19, 0], [2, 20, 141], [2, 21, 0], [2, 22, 0], [2, 23, 0], [2, 24, 0], [2, 25, 29], [2, 26, 0], [2, 27, 0], [2, 28, 0], [2, 29, 0], [2, 30, 30], [2, 31, 0], [2, 32, 0], [2, 33, 0], [2, 34, 0], [2, 35, 33], [2, 36, 0], [2, 37, 0], [2, 38, 0], [2, 39, 0], [2, 40, 78], [2, 41, 0], [2, 42, 0], [2, 43, 0], [2, 44, 0], [2, 45, 23], [2, 46, 0], [2, 47, 0], [2, 48, 0], [2, 49, 0], [2, 50, 143], [2, 51, 0], [2, 52, 0], [2, 53, 0], [2, 54, 0], [2, 55, 11], [2, 56, 0], [2, 57, 0], [2, 58, 0], [2, 59, 0], [2, 60, 13], [2, 61, 0], [2, 62, 0], [2, 63, 0], [2, 64, 0], [2, 65, 7], [2, 66, 0], [2, 67, 0], [2, 68, 0], [2, 69, 0], [2, 70, 10], [2, 71, 0], [2, 72, 0], [2, 73, 0], [2, 74, 0], [2, 75, 15], [2, 76, 0], [2, 77, 0], [2, 78, 0], [2, 79, 0], [2, 80, 6], [2, 81, 0], [2, 82, 0], [2, 83, 0], [2, 84, 0], [2, 85, 7], [2, 86, 0], [2, 87, 0], [2, 88, 0], [2, 89, 0], [2, 90, 1], [2, 91, 0], [2, 92, 0], [2, 93, 0], [2, 94, 0], [2, 95, 22], [2, 96, 0], [2, 97, 0], [2, 98, 0], [2, 99, 0], [2, 100, 16], [2, 101, 0], [2, 102, 0], [2, 103, 0], [2, 104, 0], [2, 105, 1], [2, 106, 0], [2, 107, 0], [2, 108, 0], [2, 109, 0], [2, 110, 0], [2, 111, 0], [2, 112, 0], [2, 113, 0], [2, 114, 0], [2, 115, 3], [2, 116, 0], [2, 117, 0], [2, 118, 0], [2, 119, 0], [2, 120, 4], [2, 121, 0], [2, 122, 0], [2, 123, 0], [2, 124, 0], [2, 125, 2], [2, 126, 0], [2, 127, 0], [2, 128, 0], [2, 129, 0], [2, 130, 1], [2, 131, 0], [2, 132, 0], [2, 133, 0], [2, 134, 0], [2, 135, 2], [2, 136, 0], [2, 137, 0], [2, 138, 0], [2, 139, 0], [2, 140, 0], [2, 141, 0], [2, 142, 0], [2, 143, 0], [2, 144, 0], [2, 145, 2], [2, 146, 0], [2, 147, 0], [2, 148, 0], [2, 149, 0], [2, 150, 5], [2, 151, 0], [2, 152, 0], [2, 153, 0], [2, 154, 0], [2, 155, 0], [2, 156, 0], [2, 157, 0], [2, 158, 0], [2, 159, 0], [2, 160, 0], [2, 161, 0], [2, 162, 0], [2, 163, 0], [2, 164, 0], [2, 165, 0], [2, 166, 0], [2, 167, 0], [2, 168, 0], [2, 169, 0], [2, 170, 1], [2, 171, 0], [2, 172, 0], [2, 173, 0], [2, 174, 0], [2, 175, 2], [2, 176, 0], [2, 177, 0], [2, 178, 0], [2, 179, 0], [2, 180, 2], [2, 181, 0], [2, 182, 0], [2, 183, 0], [2, 184, 0], [2, 185, 0], [2, 186, 0], [2, 187, 0], [2, 188, 0], [2, 189, 0], [2, 190, 0], [2, 191, 0], [2, 192, 0], [2, 193, 0], [2, 194, 0], [2, 195, 5], [2, 196, 0], [2, 197, 0], [2, 198, 0], [2, 199, 0], [2, 200, 19], [3, 0, 133], [3, 1, 0], [3, 2, 0], [3, 3, 0], [3, 4, 0], [3, 5, 0], [3, 6, 0], [3, 7, 0], [3, 8, 0], [3, 9, 0], [3, 10, 0], [3, 11, 0], [3, 12, 0], [3, 13, 0], [3, 14, 0], [3, 15, 0], [3, 16, 0], [3, 17, 0], [3, 18, 0], [3, 19, 0], [3, 20, 187], [3, 21, 0], [3, 22, 0], [3, 23, 0], [3, 24, 0], [3, 25, 35], [3, 26, 0], [3, 27, 0], [3, 28, 0], [3, 29, 0], [3, 30, 43], [3, 31, 0], [3, 32, 0], [3, 33, 0], [3, 34, 0], [3, 35, 34], [3, 36, 0], [3, 37, 0], [3, 38, 0], [3, 39, 0], [3, 40, 63], [3, 41, 0], [3, 42, 0], [3, 43, 0], [3, 44, 0], [3, 45, 23], [3, 46, 0], [3, 47, 0], [3, 48, 0], [3, 49, 0], [3, 50, 121], [3, 51, 0], [3, 52, 0], [3, 53, 0], [3, 54, 0], [3, 55, 12], [3, 56, 0], [3, 57, 0], [3, 58, 0], [3, 59, 0], [3, 60, 25], [3, 61, 0], [3, 62, 0], [3, 63, 0], [3, 64, 0], [3, 65, 13], [3, 66, 0], [3, 67, 0], [3, 68, 0], [3, 69, 0], [3, 70, 6], [3, 71, 0], [3, 72, 0], [3, 73, 0], [3, 74, 0], [3, 75, 39], [3, 76, 0], [3, 77, 0], [3, 78, 0], [3, 79, 0], [3, 80, 11], [3, 81, 0], [3, 82, 0], [3, 83, 0], [3, 84, 0], [3, 85, 14], [3, 86, 0], [3, 87, 0], [3, 88, 0], [3, 89, 0], [3, 90, 6], [3, 91, 0], [3, 92, 0], [3, 93, 0], [3, 94, 0], [3, 95, 55], [3, 96, 0], [3, 97, 0], [3, 98, 0], [3, 99, 0], [3, 100, 67], [3, 101, 0], [3, 102, 0], [3, 103, 0], [3, 104, 0], [3, 105, 2], [3, 106, 0], [3, 107, 0], [3, 108, 0], [3, 109, 0], [3, 110, 7], [3, 111, 0], [3, 112, 0], [3, 113, 0], [3, 114, 0], [3, 115, 7], [3, 116, 0], [3, 117, 0], [3, 118, 0], [3, 119, 0], [3, 120, 20], [3, 121, 0], [3, 122, 0], [3, 123, 0], [3, 124, 0], [3, 125, 12], [3, 126, 0], [3, 127, 0], [3, 128, 0], [3, 129, 0], [3, 130, 0], [3, 131, 0], [3, 132, 0], [3, 133, 0], [3, 134, 0], [3, 135, 1], [3, 136, 0], [3, 137, 0], [3, 138, 0], [3, 139, 0], [3, 140, 5], [3, 141, 0], [3, 142, 0], [3, 143, 0], [3, 144, 0], [3, 145, 14], [3, 146, 0], [3, 147, 0], [3, 148, 0], [3, 149, 0], [3, 150, 36], [3, 151, 0], [3, 152, 0], [3, 153, 0], [3, 154, 0], [3, 155, 0], [3, 156, 0], [3, 157, 0], [3, 158, 0], [3, 159, 0], [3, 160, 1], [3, 161, 0], [3, 162, 0], [3, 163, 0], [3, 164, 0], [3, 165, 3], [3, 166, 0], [3, 167, 0], [3, 168, 0], [3, 169, 0], [3, 170, 2], [3, 171, 0], [3, 172, 0], [3, 173, 0], [3, 174, 0], [3, 175, 8], [3, 176, 0], [3, 177, 0], [3, 178, 0], [3, 179, 0], [3, 180, 2], [3, 181, 0], [3, 182, 0], [3, 183, 0], [3, 184, 0], [3, 185, 2], [3, 186, 0], [3, 187, 0], [3, 188, 0], [3, 189, 0], [3, 190, 6], [3, 191, 0], [3, 192, 0], [3, 193, 0], [3, 194, 0], [3, 195, 72], [3, 196, 0], [3, 197, 0], [3, 198, 0], [3, 199, 0], [3, 200, 113]]

const SUBJECTS = ['Business Finance', 'Graphic Design', 'Musical Instruments', 'Web Development']

const PRICE_CDF = {
    'x': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 35, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 50, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 55, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 60, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 95, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 100, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 105, 110, 110, 110, 110, 110, 110, 110, 110, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 115, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 120, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, 130, 130, 130, 135, 135, 135, 135, 135, 135, 135, 135, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 145, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 150, 155, 155, 160, 160, 160, 160, 165, 165, 165, 165, 165, 165, 170, 170, 170, 170, 170, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 175, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 185, 185, 185, 185, 185, 185, 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200],
    'y': [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03, 0.03, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.08, 0.09, 0.09, 0.09, 0.09, 0.09, 0.09, 0.09, 0.09, 0.09, 0.09, 0.09, 0.09, 0.09, 0.09, 0.09, 0.09, 0.09, 0.09, 0.09, 0.09, 0.09, 0.09, 0.09, 0.09, 0.09, 0.09, 0.09, 0.09, 0.09, 0.09, 0.09, 0.09, 0.09, 0.09, 0.09, 0.09, 0.09, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.12, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.13, 0.14, 0.14, 0.14, 0.14, 0.14, 0.14, 0.14, 0.14, 0.14, 0.14, 0.14, 0.14, 0.14, 0.14, 0.14, 0.14, 0.14, 0.14, 0.14, 0.14, 0.14, 0.14, 0.14, 0.14, 0.14, 0.14, 0.14, 0.14, 0.14, 0.14, 0.14, 0.14, 0.14, 0.14, 0.14, 0.14, 0.14, 0.15, 0.15, 0.15, 0.15, 0.15, 0.15, 0.15, 0.15, 0.15, 0.15, 0.15, 0.15, 0.15, 0.15, 0.15, 0.15, 0.15, 0.15, 0.15, 0.15, 0.15, 0.15, 0.15, 0.15, 0.15, 0.15, 0.15, 0.15, 0.15, 0.15, 0.15, 0.15, 0.15, 0.15, 0.15, 0.15, 0.15, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.17, 0.17, 0.17, 0.17, 0.17, 0.17, 0.17, 0.17, 0.17, 0.17, 0.17, 0.17, 0.17, 0.17, 0.17, 0.17, 0.17, 0.17, 0.17, 0.17, 0.17, 0.17, 0.17, 0.17, 0.17, 0.17, 0.17, 0.17, 0.17, 0.17, 0.17, 0.17, 0.17, 0.17, 0.17, 0.17, 0.17, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.18, 0.19, 0.19, 0.19, 0.19, 0.19, 0.19, 0.19, 0.19, 0.19, 0.19, 0.19, 0.19, 0.19, 0.19, 0.19, 0.19, 0.19, 0.19, 0.19, 0.19, 0.19, 0.19, 0.19, 0.19, 0.19, 0.19, 0.19, 0.19, 0.19, 0.19, 0.19, 0.19, 0.19, 0.19, 0.19, 0.19, 0.19, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.21, 0.21, 0.21, 0.21, 0.21, 0.21, 0.21, 0.21, 0.21, 0.21, 0.21, 0.21, 0.21, 0.21, 0.21, 0.21, 0.21, 0.21, 0.21, 0.21, 0.21, 0.21, 0.21, 0.21, 0.21, 0.21, 0.21, 0.21, 0.21, 0.21, 0.21, 0.21, 0.21, 0.21, 0.21, 0.21, 0.21, 0.22, 0.22, 0.22, 0.22, 0.22, 0.22, 0.22, 0.22, 0.22, 0.22, 0.22, 0.22, 0.22, 0.22, 0.22, 0.22, 0.22, 0.22, 0.22, 0.22, 0.22, 0.22, 0.22, 0.22, 0.22, 0.22, 0.22, 0.22, 0.22, 0.22, 0.22, 0.22, 0.22, 0.22, 0.22, 0.22, 0.22, 0.23, 0.23, 0.23, 0.23, 0.23, 0.23, 0.23, 0.23, 0.23, 0.23, 0.23, 0.23, 0.23, 0.23, 0.23, 0.23, 0.23, 0.23, 0.23, 0.23, 0.23, 0.23, 0.23, 0.23, 0.23, 0.23, 0.23, 0.23, 0.23, 0.23, 0.23, 0.23, 0.23, 0.23, 0.23, 0.23, 0.23, 0.24, 0.24, 0.24, 0.24, 0.24, 0.24, 0.24, 0.24, 0.24, 0.24, 0.24, 0.24, 0.24, 0.24, 0.24, 0.24, 0.24, 0.24, 0.24, 0.24, 0.24, 0.24, 0.24, 0.24, 0.24, 0.24, 0.24, 0.24, 0.24, 0.24, 0.24, 0.24, 0.24, 0.24, 0.24, 0.24, 0.24, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.26, 0.26, 0.26, 0.26, 0.26, 0.26, 0.26, 0.26, 0.26, 0.26, 0.26, 0.26, 0.26, 0.26, 0.26, 0.26, 0.26, 0.26, 0.26, 0.26, 0.26, 0.26, 0.26, 0.26, 0.26, 0.26, 0.26, 0.26, 0.26, 0.26, 0.26, 0.26, 0.26, 0.26, 0.26, 0.26, 0.26, 0.27, 0.27, 0.27, 0.27, 0.27, 0.27, 0.27, 0.27, 0.27, 0.27, 0.27, 0.27, 0.27, 0.27, 0.27, 0.27, 0.27, 0.27, 0.27, 0.27, 0.27, 0.27, 0.27, 0.27, 0.27, 0.27, 0.27, 0.27, 0.27, 0.27, 0.27, 0.27, 0.27, 0.27, 0.27, 0.27, 0.27, 0.28, 0.28, 0.28, 0.28, 0.28, 0.28, 0.28, 0.28, 0.28, 0.28, 0.28, 0.28, 0.28, 0.28, 0.28, 0.28, 0.28, 0.28, 0.28, 0.28, 0.28, 0.28, 0.28, 0.28, 0.28, 0.28, 0.28, 0.28, 0.28, 0.28, 0.28, 0.28, 0.28, 0.28, 0.28, 0.28, 0.28, 0.29, 0.29, 0.29, 0.29, 0.29, 0.29, 0.29, 0.29, 0.29, 0.29, 0.29, 0.29, 0.29, 0.29, 0.29, 0.29, 0.29, 0.29, 0.29, 0.29, 0.29, 0.29, 0.29, 0.29, 0.29, 0.29, 0.29, 0.29, 0.29, 0.29, 0.29, 0.29, 0.29, 0.29, 0.29, 0.29, 0.29, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.31, 0.31, 0.31, 0.31, 0.31, 0.31, 0.31, 0.31, 0.31, 0.31, 0.31, 0.31, 0.31, 0.31, 0.31, 0.31, 0.31, 0.31, 0.31, 0.31, 0.31, 0.31, 0.31, 0.31, 0.31, 0.31, 0.31, 0.31, 0.31, 0.31, 0.31, 0.31, 0.31, 0.31, 0.31, 0.31, 0.31, 0.32, 0.32, 0.32, 0.32, 0.32, 0.32, 0.32, 0.32, 0.32, 0.32, 0.32, 0.32, 0.32, 0.32, 0.32, 0.32, 0.32, 0.32, 0.32, 0.32, 0.32, 0.32, 0.32, 0.32, 0.32, 0.32, 0.32, 0.32, 0.32, 0.32, 0.32, 0.32, 0.32, 0.32, 0.32, 0.32, 0.32, 0.33, 0.33, 0.33, 0.33, 0.33, 0.33, 0.33, 0.33, 0.33, 0.33, 0.33, 0.33, 0.33, 0.33, 0.33, 0.33, 0.33, 0.33, 0.33, 0.33, 0.33, 0.33, 0.33, 0.33, 0.33, 0.33, 0.33, 0.33, 0.33, 0.33, 0.33, 0.33, 0.33, 0.33, 0.33, 0.33, 0.33, 0.34, 0.34, 0.34, 0.34, 0.34, 0.34, 0.34, 0.34, 0.34, 0.34, 0.34, 0.34, 0.34, 0.34, 0.34, 0.34, 0.34, 0.34, 0.34, 0.34, 0.34, 0.34, 0.34, 0.34, 0.34, 0.34, 0.34, 0.34, 0.34, 0.34, 0.34, 0.34, 0.34, 0.34, 0.34, 0.34, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.35, 0.36, 0.36, 0.36, 0.36, 0.36, 0.36, 0.36, 0.36, 0.36, 0.36, 0.36, 0.36, 0.36, 0.36, 0.36, 0.36, 0.36, 0.36, 0.36, 0.36, 0.36, 0.36, 0.36, 0.36, 0.36, 0.36, 0.36, 0.36, 0.36, 0.36, 0.36, 0.36, 0.36, 0.36, 0.36, 0.36, 0.36, 0.37, 0.37, 0.37, 0.37, 0.37, 0.37, 0.37, 0.37, 0.37, 0.37, 0.37, 0.37, 0.37, 0.37, 0.37, 0.37, 0.37, 0.37, 0.37, 0.37, 0.37, 0.37, 0.37, 0.37, 0.37, 0.37, 0.37, 0.37, 0.37, 0.37, 0.37, 0.37, 0.37, 0.37, 0.37, 0.37, 0.37, 0.38, 0.38, 0.38, 0.38, 0.38, 0.38, 0.38, 0.38, 0.38, 0.38, 0.38, 0.38, 0.38, 0.38, 0.38, 0.38, 0.38, 0.38, 0.38, 0.38, 0.38, 0.38, 0.38, 0.38, 0.38, 0.38, 0.38, 0.38, 0.38, 0.38, 0.38, 0.38, 0.38, 0.38, 0.38, 0.38, 0.38, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.41, 0.41, 0.41, 0.41, 0.41, 0.41, 0.41, 0.41, 0.41, 0.41, 0.41, 0.41, 0.41, 0.41, 0.41, 0.41, 0.41, 0.41, 0.41, 0.41, 0.41, 0.41, 0.41, 0.41, 0.41, 0.41, 0.41, 0.41, 0.41, 0.41, 0.41, 0.41, 0.41, 0.41, 0.41, 0.41, 0.41, 0.42, 0.42, 0.42, 0.42, 0.42, 0.42, 0.42, 0.42, 0.42, 0.42, 0.42, 0.42, 0.42, 0.42, 0.42, 0.42, 0.42, 0.42, 0.42, 0.42, 0.42, 0.42, 0.42, 0.42, 0.42, 0.42, 0.42, 0.42, 0.42, 0.42, 0.42, 0.42, 0.42, 0.42, 0.42, 0.42, 0.42, 0.43, 0.43, 0.43, 0.43, 0.43, 0.43, 0.43, 0.43, 0.43, 0.43, 0.43, 0.43, 0.43, 0.43, 0.43, 0.43, 0.43, 0.43, 0.43, 0.43, 0.43, 0.43, 0.43, 0.43, 0.43, 0.43, 0.43, 0.43, 0.43, 0.43, 0.43, 0.43, 0.43, 0.43, 0.43, 0.43, 0.44, 0.44, 0.44, 0.44, 0.44, 0.44, 0.44, 0.44, 0.44, 0.44, 0.44, 0.44, 0.44, 0.44, 0.44, 0.44, 0.44, 0.44, 0.44, 0.44, 0.44, 0.44, 0.44, 0.44, 0.44, 0.44, 0.44, 0.44, 0.44, 0.44, 0.44, 0.44, 0.44, 0.44, 0.44, 0.44, 0.44, 0.45, 0.45, 0.45, 0.45, 0.45, 0.45, 0.45, 0.45, 0.45, 0.45, 0.45, 0.45, 0.45, 0.45, 0.45, 0.45, 0.45, 0.45, 0.45, 0.45, 0.45, 0.45, 0.45, 0.45, 0.45, 0.45, 0.45, 0.45, 0.45, 0.45, 0.45, 0.45, 0.45, 0.45, 0.45, 0.45, 0.45, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.46, 0.47, 0.47, 0.47, 0.47, 0.47, 0.47, 0.47, 0.47, 0.47, 0.47, 0.47, 0.47, 0.47, 0.47, 0.47, 0.47, 0.47, 0.47, 0.47, 0.47, 0.47, 0.47, 0.47, 0.47, 0.47, 0.47, 0.47, 0.47, 0.47, 0.47, 0.47, 0.47, 0.47, 0.47, 0.47, 0.47, 0.47, 0.48, 0.48, 0.48, 0.48, 0.48, 0.48, 0.48, 0.48, 0.48, 0.48, 0.48, 0.48, 0.48, 0.48, 0.48, 0.48, 0.48, 0.48, 0.48, 0.48, 0.48, 0.48, 0.48, 0.48, 0.48, 0.48, 0.48, 0.48, 0.48, 0.48, 0.48, 0.48, 0.48, 0.48, 0.48, 0.48, 0.49, 0.49, 0.49, 0.49, 0.49, 0.49, 0.49, 0.49, 0.49, 0.49, 0.49, 0.49, 0.49, 0.49, 0.49, 0.49, 0.49, 0.49, 0.49, 0.49, 0.49, 0.49, 0.49, 0.49, 0.49, 0.49, 0.49, 0.49, 0.49, 0.49, 0.49, 0.49, 0.49, 0.49, 0.49, 0.49, 0.49, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.51, 0.51, 0.51, 0.51, 0.51, 0.51, 0.51, 0.51, 0.51, 0.51, 0.51, 0.51, 0.51, 0.51, 0.51, 0.51, 0.51, 0.51, 0.51, 0.51, 0.51, 0.51, 0.51, 0.51, 0.51, 0.51, 0.51, 0.51, 0.51, 0.51, 0.51, 0.51, 0.51, 0.51, 0.51, 0.51, 0.51, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.52, 0.53, 0.53, 0.53, 0.53, 0.53, 0.53, 0.53, 0.53, 0.53, 0.53, 0.53, 0.53, 0.53, 0.53, 0.53, 0.53, 0.53, 0.53, 0.53, 0.53, 0.53, 0.53, 0.53, 0.53, 0.53, 0.53, 0.53, 0.53, 0.53, 0.53, 0.53, 0.53, 0.53, 0.53, 0.53, 0.53, 0.53, 0.54, 0.54, 0.54, 0.54, 0.54, 0.54, 0.54, 0.54, 0.54, 0.54, 0.54, 0.54, 0.54, 0.54, 0.54, 0.54, 0.54, 0.54, 0.54, 0.54, 0.54, 0.54, 0.54, 0.54, 0.54, 0.54, 0.54, 0.54, 0.54, 0.54, 0.54, 0.54, 0.54, 0.54, 0.54, 0.54, 0.54, 0.55, 0.55, 0.55, 0.55, 0.55, 0.55, 0.55, 0.55, 0.55, 0.55, 0.55, 0.55, 0.55, 0.55, 0.55, 0.55, 0.55, 0.55, 0.55, 0.55, 0.55, 0.55, 0.55, 0.55, 0.55, 0.55, 0.55, 0.55, 0.55, 0.55, 0.55, 0.55, 0.55, 0.55, 0.55, 0.55, 0.55, 0.56, 0.56, 0.56, 0.56, 0.56, 0.56, 0.56, 0.56, 0.56, 0.56, 0.56, 0.56, 0.56, 0.56, 0.56, 0.56, 0.56, 0.56, 0.56, 0.56, 0.56, 0.56, 0.56, 0.56, 0.56, 0.56, 0.56, 0.56, 0.56, 0.56, 0.56, 0.56, 0.56, 0.56, 0.56, 0.56, 0.56, 0.57, 0.57, 0.57, 0.57, 0.57, 0.57, 0.57, 0.57, 0.57, 0.57, 0.57, 0.57, 0.57, 0.57, 0.57, 0.57, 0.57, 0.57, 0.57, 0.57, 0.57, 0.57, 0.57, 0.57, 0.57, 0.57, 0.57, 0.57, 0.57, 0.57, 0.57, 0.57, 0.57, 0.57, 0.57, 0.57, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.59, 0.59, 0.59, 0.59, 0.59, 0.59, 0.59, 0.59, 0.59, 0.59, 0.59, 0.59, 0.59, 0.59, 0.59, 0.59, 0.59, 0.59, 0.59, 0.59, 0.59, 0.59, 0.59, 0.59, 0.59, 0.59, 0.59, 0.59, 0.59, 0.59, 0.59, 0.59, 0.59, 0.59, 0.59, 0.59, 0.59, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.61, 0.61, 0.61, 0.61, 0.61, 0.61, 0.61, 0.61, 0.61, 0.61, 0.61, 0.61, 0.61, 0.61, 0.61, 0.61, 0.61, 0.61, 0.61, 0.61, 0.61, 0.61, 0.61, 0.61, 0.61, 0.61, 0.61, 0.61, 0.61, 0.61, 0.61, 0.61, 0.61, 0.61, 0.61, 0.61, 0.62, 0.62, 0.62, 0.62, 0.62, 0.62, 0.62, 0.62, 0.62, 0.62, 0.62, 0.62, 0.62, 0.62, 0.62, 0.62, 0.62, 0.62, 0.62, 0.62, 0.62, 0.62, 0.62, 0.62, 0.62, 0.62, 0.62, 0.62, 0.62, 0.62, 0.62, 0.62, 0.62, 0.62, 0.62, 0.62, 0.62, 0.63, 0.63, 0.63, 0.63, 0.63, 0.63, 0.63, 0.63, 0.63, 0.63, 0.63, 0.63, 0.63, 0.63, 0.63, 0.63, 0.63, 0.63, 0.63, 0.63, 0.63, 0.63, 0.63, 0.63, 0.63, 0.63, 0.63, 0.63, 0.63, 0.63, 0.63, 0.63, 0.63, 0.63, 0.63, 0.63, 0.63, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.64, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.65, 0.66, 0.66, 0.66, 0.66, 0.66, 0.66, 0.66, 0.66, 0.66, 0.66, 0.66, 0.66, 0.66, 0.66, 0.66, 0.66, 0.66, 0.66, 0.66, 0.66, 0.66, 0.66, 0.66, 0.66, 0.66, 0.66, 0.66, 0.66, 0.66, 0.66, 0.66, 0.66, 0.66, 0.66, 0.66, 0.66, 0.67, 0.67, 0.67, 0.67, 0.67, 0.67, 0.67, 0.67, 0.67, 0.67, 0.67, 0.67, 0.67, 0.67, 0.67, 0.67, 0.67, 0.67, 0.67, 0.67, 0.67, 0.67, 0.67, 0.67, 0.67, 0.67, 0.67, 0.67, 0.67, 0.67, 0.67, 0.67, 0.67, 0.67, 0.67, 0.67, 0.67, 0.68, 0.68, 0.68, 0.68, 0.68, 0.68, 0.68, 0.68, 0.68, 0.68, 0.68, 0.68, 0.68, 0.68, 0.68, 0.68, 0.68, 0.68, 0.68, 0.68, 0.68, 0.68, 0.68, 0.68, 0.68, 0.68, 0.68, 0.68, 0.68, 0.68, 0.68, 0.68, 0.68, 0.68, 0.68, 0.68, 0.68, 0.69, 0.69, 0.69, 0.69, 0.69, 0.69, 0.69, 0.69, 0.69, 0.69, 0.69, 0.69, 0.69, 0.69, 0.69, 0.69, 0.69, 0.69, 0.69, 0.69, 0.69, 0.69, 0.69, 0.69, 0.69, 0.69, 0.69, 0.69, 0.69, 0.69, 0.69, 0.69, 0.69, 0.69, 0.69, 0.69, 0.69, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 0.7, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.71, 0.72, 0.72, 0.72, 0.72, 0.72, 0.72, 0.72, 0.72, 0.72, 0.72, 0.72, 0.72, 0.72, 0.72, 0.72, 0.72, 0.72, 0.72, 0.72, 0.72, 0.72, 0.72, 0.72, 0.72, 0.72, 0.72, 0.72, 0.72, 0.72, 0.72, 0.72, 0.72, 0.72, 0.72, 0.72, 0.72, 0.72, 0.73, 0.73, 0.73, 0.73, 0.73, 0.73, 0.73, 0.73, 0.73, 0.73, 0.73, 0.73, 0.73, 0.73, 0.73, 0.73, 0.73, 0.73, 0.73, 0.73, 0.73, 0.73, 0.73, 0.73, 0.73, 0.73, 0.73, 0.73, 0.73, 0.73, 0.73, 0.73, 0.73, 0.73, 0.73, 0.73, 0.73, 0.74, 0.74, 0.74, 0.74, 0.74, 0.74, 0.74, 0.74, 0.74, 0.74, 0.74, 0.74, 0.74, 0.74, 0.74, 0.74, 0.74, 0.74, 0.74, 0.74, 0.74, 0.74, 0.74, 0.74, 0.74, 0.74, 0.74, 0.74, 0.74, 0.74, 0.74, 0.74, 0.74, 0.74, 0.74, 0.74, 0.74, 0.75, 0.75, 0.75, 0.75, 0.75, 0.75, 0.75, 0.75, 0.75, 0.75, 0.75, 0.75, 0.75, 0.75, 0.75, 0.75, 0.75, 0.75, 0.75, 0.75, 0.75, 0.75, 0.75, 0.75, 0.75, 0.75, 0.75, 0.75, 0.75, 0.75, 0.75, 0.75, 0.75, 0.75, 0.75, 0.75, 0.76, 0.76, 0.76, 0.76, 0.76, 0.76, 0.76, 0.76, 0.76, 0.76, 0.76, 0.76, 0.76, 0.76, 0.76, 0.76, 0.76, 0.76, 0.76, 0.76, 0.76, 0.76, 0.76, 0.76, 0.76, 0.76, 0.76, 0.76, 0.76, 0.76, 0.76, 0.76, 0.76, 0.76, 0.76, 0.76, 0.76, 0.77, 0.77, 0.77, 0.77, 0.77, 0.77, 0.77, 0.77, 0.77, 0.77, 0.77, 0.77, 0.77, 0.77, 0.77, 0.77, 0.77, 0.77, 0.77, 0.77, 0.77, 0.77, 0.77, 0.77, 0.77, 0.77, 0.77, 0.77, 0.77, 0.77, 0.77, 0.77, 0.77, 0.77, 0.77, 0.77, 0.77, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.78, 0.79, 0.79, 0.79, 0.79, 0.79, 0.79, 0.79, 0.79, 0.79, 0.79, 0.79, 0.79, 0.79, 0.79, 0.79, 0.79, 0.79, 0.79, 0.79, 0.79, 0.79, 0.79, 0.79, 0.79, 0.79, 0.79, 0.79, 0.79, 0.79, 0.79, 0.79, 0.79, 0.79, 0.79, 0.79, 0.79, 0.79, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.8, 0.81, 0.81, 0.81, 0.81, 0.81, 0.81, 0.81, 0.81, 0.81, 0.81, 0.81, 0.81, 0.81, 0.81, 0.81, 0.81, 0.81, 0.81, 0.81, 0.81, 0.81, 0.81, 0.81, 0.81, 0.81, 0.81, 0.81, 0.81, 0.81, 0.81, 0.81, 0.81, 0.81, 0.81, 0.81, 0.81, 0.81, 0.82, 0.82, 0.82, 0.82, 0.82, 0.82, 0.82, 0.82, 0.82, 0.82, 0.82, 0.82, 0.82, 0.82, 0.82, 0.82, 0.82, 0.82, 0.82, 0.82, 0.82, 0.82, 0.82, 0.82, 0.82, 0.82, 0.82, 0.82, 0.82, 0.82, 0.82, 0.82, 0.82, 0.82, 0.82, 0.82, 0.82, 0.83, 0.83, 0.83, 0.83, 0.83, 0.83, 0.83, 0.83, 0.83, 0.83, 0.83, 0.83, 0.83, 0.83, 0.83, 0.83, 0.83, 0.83, 0.83, 0.83, 0.83, 0.83, 0.83, 0.83, 0.83, 0.83, 0.83, 0.83, 0.83, 0.83, 0.83, 0.83, 0.83, 0.83, 0.83, 0.83, 0.83, 0.84, 0.84, 0.84, 0.84, 0.84, 0.84, 0.84, 0.84, 0.84, 0.84, 0.84, 0.84, 0.84, 0.84, 0.84, 0.84, 0.84, 0.84, 0.84, 0.84, 0.84, 0.84, 0.84, 0.84, 0.84, 0.84, 0.84, 0.84, 0.84, 0.84, 0.84, 0.84, 0.84, 0.84, 0.84, 0.84, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.85, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.86, 0.87, 0.87, 0.87, 0.87, 0.87, 0.87, 0.87, 0.87, 0.87, 0.87, 0.87, 0.87, 0.87, 0.87, 0.87, 0.87, 0.87, 0.87, 0.87, 0.87, 0.87, 0.87, 0.87, 0.87, 0.87, 0.87, 0.87, 0.87, 0.87, 0.87, 0.87, 0.87, 0.87, 0.87, 0.87, 0.87, 0.87, 0.88, 0.88, 0.88, 0.88, 0.88, 0.88, 0.88, 0.88, 0.88, 0.88, 0.88, 0.88, 0.88, 0.88, 0.88, 0.88, 0.88, 0.88, 0.88, 0.88, 0.88, 0.88, 0.88, 0.88, 0.88, 0.88, 0.88, 0.88, 0.88, 0.88, 0.88, 0.88, 0.88, 0.88, 0.88, 0.88, 0.88, 0.89, 0.89, 0.89, 0.89, 0.89, 0.89, 0.89, 0.89, 0.89, 0.89, 0.89, 0.89, 0.89, 0.89, 0.89, 0.89, 0.89, 0.89, 0.89, 0.89, 0.89, 0.89, 0.89, 0.89, 0.89, 0.89, 0.89, 0.89, 0.89, 0.89, 0.89, 0.89, 0.89, 0.89, 0.89, 0.89, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.9, 0.91, 0.91, 0.91, 0.91, 0.91, 0.91, 0.91, 0.91, 0.91, 0.91, 0.91, 0.91, 0.91, 0.91, 0.91, 0.91, 0.91, 0.91, 0.91, 0.91, 0.91, 0.91, 0.91, 0.91, 0.91, 0.91, 0.91, 0.91, 0.91, 0.91, 0.91, 0.91, 0.91, 0.91, 0.91, 0.91, 0.91, 0.92, 0.92, 0.92, 0.92, 0.92, 0.92, 0.92, 0.92, 0.92, 0.92, 0.92, 0.92, 0.92, 0.92, 0.92, 0.92, 0.92, 0.92, 0.92, 0.92, 0.92, 0.92, 0.92, 0.92, 0.92, 0.92, 0.92, 0.92, 0.92, 0.92, 0.92, 0.92, 0.92, 0.92, 0.92, 0.92, 0.92, 0.93, 0.93, 0.93, 0.93, 0.93, 0.93, 0.93, 0.93, 0.93, 0.93, 0.93, 0.93, 0.93, 0.93, 0.93, 0.93, 0.93, 0.93, 0.93, 0.93, 0.93, 0.93, 0.93, 0.93, 0.93, 0.93, 0.93, 0.93, 0.93, 0.93, 0.93, 0.93, 0.93, 0.93, 0.93, 0.93, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.94, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.95, 0.96, 0.96, 0.96, 0.96, 0.96, 0.96, 0.96, 0.96, 0.96, 0.96, 0.96, 0.96, 0.96, 0.96, 0.96, 0.96, 0.96, 0.96, 0.96, 0.96, 0.96, 0.96, 0.96, 0.96, 0.96, 0.96, 0.96, 0.96, 0.96, 0.96, 0.96, 0.96, 0.96, 0.96, 0.96, 0.96, 0.96, 0.97, 0.97, 0.97, 0.97, 0.97, 0.97, 0.97, 0.97, 0.97, 0.97, 0.97, 0.97, 0.97, 0.97, 0.97, 0.97, 0.97, 0.97, 0.97, 0.97, 0.97, 0.97, 0.97, 0.97, 0.97, 0.97, 0.97, 0.97, 0.97, 0.97, 0.97, 0.97, 0.97, 0.97, 0.97, 0.97, 0.97, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.98, 0.99, 0.99, 0.99, 0.99, 0.99, 0.99, 0.99, 0.99, 0.99, 0.99, 0.99, 0.99, 0.99, 0.99, 0.99, 0.99, 0.99, 0.99, 0.99, 0.99, 0.99, 0.99, 0.99, 0.99, 0.99, 0.99, 0.99, 0.99, 0.99, 0.99, 0.99, 0.99, 0.99, 0.99, 0.99, 0.99, 0.99, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]
}

const PRICE_COUNT = {
    x: ['0-25', '25-50', '50-75', '75-100', '100-125', '125-150', '150-175', '175-200'],
    y: [984, 1050, 247, 364, 102, 136, 30, 455]
}

const SUBJECT_YEAR_COUNT = { 'Business Finance': [0, 6, 84, 192, 339, 349, 225], 'Graphic Design': [0, 10, 23, 66, 168, 181, 155], 'Musical Instruments': [0, 10, 39, 120, 171, 228, 112], 'Web Development': [5, 19, 56, 113, 336, 448, 223], 'year': [2011, 2012, 2013, 2014, 2015, 2016, 2017] }

const SUBJECT_WORD_COUNT = {
    'Business Finance': [{ 'name': 'Trading', 'value': 254 },
    { 'name': 'Forex', 'value': 148 },
    { 'name': 'Financial', 'value': 138 },
    { 'name': 'Accounting', 'value': 101 },
    { 'name': 'Options', 'value': 97 },
    { 'name': 'How', 'value': 95 },
    { 'name': 'Learn', 'value': 87 },
    { 'name': 'Analysis', 'value': 64 },
    { 'name': 'Trade', 'value': 64 },
    { 'name': 'Stock', 'value': 64 },
    { 'name': 'A', 'value': 58 },
    { 'name': 'Complete', 'value': 52 },
    { 'name': 'Course', 'value': 51 },
    { 'name': 'Your', 'value': 50 },
    { 'name': 'To', 'value': 46 },
    { 'name': 'Market', 'value': 46 },
    { 'name': 'Introduction', 'value': 43 },
    { 'name': 'Stocks', 'value': 43 },
    { 'name': 'For', 'value': 43 },
    { 'name': 'Business', 'value': 41 },
    { 'name': 'Investing', 'value': 41 },
    { 'name': 'Guide', 'value': 40 },
    { 'name': 'Finance', 'value': 39 },
    { 'name': 'Beginners', 'value': 39 },
    { 'name': 'Basics', 'value': 39 },
    { 'name': 'Level', 'value': 37 },
    { 'name': 'CFA', 'value': 37 },
    { 'name': 'de', 'value': 31 },
    { 'name': 'Management', 'value': 30 },
    { 'name': 'Technical', 'value': 29 },
    { 'name': 'In', 'value': 27 },
    { 'name': 'trading', 'value': 26 },
    { 'name': 'Bitcoin', 'value': 25 },
    { 'name': 'Bookkeeping', 'value': 25 },
    { 'name': 'I', 'value': 25 },
    { 'name': 'Excel', 'value': 25 },
    { 'name': 'Build', 'value': 23 },
    { 'name': 'Strategy', 'value': 23 },
    { 'name': '1', 'value': 23 },
    { 'name': 'Advanced', 'value': 22 },
    { 'name': 'Easy', 'value': 21 },
    { 'name': 'Investment', 'value': 21 },
    { 'name': 'Modeling', 'value': 20 },
    { 'name': 'Professional', 'value': 19 },
    { 'name': 'Capital', 'value': 18 },
    { 'name': 'Statements', 'value': 18 },
    { 'name': 'Tax', 'value': 18 },
    { 'name': 'Day', 'value': 17 },
    { 'name': 'CA', 'value': 17 },
    { 'name': 'Strategies', 'value': 17 },
    { 'name': 'You', 'value': 17 },
    { 'name': 'Master', 'value': 16 },
    { 'name': 'Binary', 'value': 16 },
    { 'name': 'Futures', 'value': 16 },
    { 'name': 'en', 'value': 16 },
    { 'name': 'Option', 'value': 16 },
    { 'name': 'Trader', 'value': 16 },
    { 'name': 'With', 'value': 16 },
    { 'name': 'Robot', 'value': 15 },
    { 'name': '2', 'value': 15 },
    { 'name': 'Get', 'value': 15 },
    { 'name': 'Profit', 'value': 14 },
    { 'name': 'Statement', 'value': 14 },
    { 'name': 'Study', 'value': 14 },
    { 'name': 'Fundamentals', 'value': 13 },
    { 'name': 'Simple', 'value': 13 },
    { 'name': 'para', 'value': 13 },
    { 'name': '2017', 'value': 13 },
    { 'name': 'Basic', 'value': 13 },
    { 'name': 'Made', 'value': 12 },
    { 'name': 'From', 'value': 12 },
    { 'name': 'Cost', 'value': 12 },
    { 'name': 'System', 'value': 12 },
    { 'name': 'Beginner', 'value': 12 },
    { 'name': 'Training', 'value': 12 },
    { 'name': 'Start', 'value': 12 },
    { 'name': 'Small', 'value': 12 },
    { 'name': 'Markets', 'value': 12 },
    { 'name': 'Patterns', 'value': 12 },
    { 'name': 'Invest', 'value': 12 },
    { 'name': 'Using', 'value': 12 },
    { 'name': 'Corporate', 'value': 11 },
    { 'name': 'Equity', 'value': 11 },
    { 'name': 'Fund', 'value': 11 },
    { 'name': 'Step', 'value': 11 },
    { 'name': 'Credit', 'value': 11 },
    { 'name': 'Steps', 'value': 11 },
    { 'name': 'Exams', 'value': 11 },
    { 'name': 'Valuation', 'value': 11 },
    { 'name': 'Part', 'value': 11 },
    { 'name': 'Risk', 'value': 11 },
    { 'name': '101', 'value': 10 },
    { 'name': 'Understanding', 'value': 10 },
    { 'name': 'Value', 'value': 10 },
    { 'name': 'Of', 'value': 10 },
    { 'name': 'An', 'value': 10 },
    { 'name': 'trade', 'value': 10 },
    { 'name': 'Hedge', 'value': 10 },
    { 'name': 'Comprehensive', 'value': 10 },
    { 'name': 'Portfolio', 'value': 10 }],
    'Graphic Design': [{ 'name': 'Photoshop', 'value': 144 },
    { 'name': 'Design', 'value': 144 },
    { 'name': 'Adobe', 'value': 97 },
    { 'name': 'Illustrator', 'value': 82 },
    { 'name': 'Learn', 'value': 63 },
    { 'name': 'How', 'value': 51 },
    { 'name': 'Logo', 'value': 50 },
    { 'name': 'CC', 'value': 47 },
    { 'name': 'Create', 'value': 43 },
    { 'name': 'Graphic', 'value': 36 },
    { 'name': 'de', 'value': 33 },
    { 'name': 'Beginners', 'value': 24 },
    { 'name': 'Drawing', 'value': 23 },
    { 'name': 'Guide', 'value': 22 },
    { 'name': 'To', 'value': 22 },
    { 'name': 'Draw', 'value': 21 },
    { 'name': 'From', 'value': 20 },
    { 'name': 'With', 'value': 19 },
    { 'name': 'A', 'value': 18 },
    { 'name': 'Make', 'value': 17 },
    { 'name': 'Professional', 'value': 17 },
    { 'name': 'Mastering', 'value': 16 },
    { 'name': 'Course', 'value': 16 },
    { 'name': 'Canva', 'value': 15 },
    { 'name': 'Graphics', 'value': 14 },
    { 'name': 'Art', 'value': 14 },
    { 'name': 'para', 'value': 14 },
    { 'name': 'Your', 'value': 13 },
    { 'name': 'App', 'value': 13 },
    { 'name': 'InDesign', 'value': 13 },
    { 'name': 'Vector', 'value': 12 },
    { 'name': 'Digital', 'value': 12 },
    { 'name': 'For', 'value': 12 },
    { 'name': 'Master', 'value': 12 },
    { 'name': 'Creating', 'value': 12 },
    { 'name': 'Corel', 'value': 11 },
    { 'name': 'Beginner', 'value': 11 },
    { 'name': 'Complete', 'value': 11 },
    { 'name': 'Designer', 'value': 11 },
    { 'name': 'Easy', 'value': 11 },
    { 'name': 'con', 'value': 11 },
    { 'name': 'design', 'value': 10 },
    { 'name': 'Flat', 'value': 10 },
    { 'name': 'Cover', 'value': 10 },
    { 'name': 'Typography', 'value': 10 },
    { 'name': 'Business', 'value': 10 },
    { 'name': '1', 'value': 10 },
    { 'name': 'create', 'value': 10 },
    { 'name': 'Become', 'value': 9 },
    { 'name': 'en', 'value': 9 },
    { 'name': 'Book', 'value': 9 },
    { 'name': '3D', 'value': 9 },
    { 'name': 'Scratch', 'value': 9 },
    { 'name': 'Advanced', 'value': 9 },
    { 'name': 'Designs', 'value': 9 },
    { 'name': 'Curso', 'value': 8 },
    { 'name': 'After', 'value': 8 },
    { 'name': 'Web', 'value': 8 },
    { 'name': 'logo', 'value': 8 },
    { 'name': 'Training', 'value': 8 },
    { 'name': 'Skills', 'value': 8 },
    { 'name': 'Illustration', 'value': 8 },
    { 'name': 'Mobile', 'value': 8 },
    { 'name': 'professional', 'value': 7 },
    { 'name': 'Sketch', 'value': 7 },
    { 'name': 'Inkscape', 'value': 7 },
    { 'name': 'Photo', 'value': 7 },
    { 'name': 'Images', 'value': 7 },
    { 'name': 'Essential', 'value': 7 },
    { 'name': 'Figure', 'value': 7 },
    { 'name': 'Basics', 'value': 7 },
    { 'name': 'Quick', 'value': 7 },
    { 'name': 'Designers', 'value': 7 },
    { 'name': 'com', 'value': 7 },
    { 'name': 'Using', 'value': 7 },
    { 'name': 'Essentials', 'value': 7 },
    { 'name': 'Projects', 'value': 7 },
    { 'name': 'CS6', 'value': 7 },
    { 'name': 'Logos', 'value': 7 },
    { 'name': 'Icon', 'value': 7 },
    { 'name': 'Covers', 'value': 7 },
    { 'name': 'In', 'value': 6 },
    { 'name': 'Diseño', 'value': 6 },
    { 'name': 'Expert', 'value': 6 },
    { 'name': 'Painting', 'value': 6 },
    { 'name': 'Start', 'value': 6 },
    { 'name': 'Pro', 'value': 6 },
    { 'name': '30', 'value': 6 },
    { 'name': 'Designing', 'value': 6 },
    { 'name': 'Character', 'value': 6 },
    { 'name': 'Tools', 'value': 6 },
    { 'name': 'Hour', 'value': 6 },
    { 'name': 'PowerPoint', 'value': 6 },
    { 'name': 'eBook', 'value': 6 },
    { 'name': '3', 'value': 6 },
    { 'name': 'Simple', 'value': 6 },
    { 'name': 'photoshop', 'value': 6 },
    { 'name': 'Techniques', 'value': 6 },
    { 'name': 'Como', 'value': 6 },
    { 'name': 'Cartoon', 'value': 6 }],
    'Musical Instruments': [{ 'name': 'Guitar', 'value': 193 },
    { 'name': 'Piano', 'value': 161 },
    { 'name': 'Learn', 'value': 129 },
    { 'name': 'Play', 'value': 96 },
    { 'name': 'Lessons', 'value': 69 },
    { 'name': 'play', 'value': 61 },
    { 'name': 'Beginner', 'value': 52 },
    { 'name': 'Harmonica', 'value': 49 },
    { 'name': 'Instant', 'value': 48 },
    { 'name': 'Beginners', 'value': 45 },
    { 'name': 'Blues', 'value': 44 },
    { 'name': 'Course', 'value': 38 },
    { 'name': 'Aprende', 'value': 36 },
    { 'name': 'To', 'value': 36 },
    { 'name': 'Master', 'value': 35 },
    { 'name': 'de', 'value': 32 },
    { 'name': 'tocar', 'value': 31 },
    { 'name': 'How', 'value': 31 },
    { 'name': 'For', 'value': 30 },
    { 'name': '1', 'value': 29 },
    { 'name': 'Pro', 'value': 26 },
    { 'name': '2', 'value': 23 },
    { 'name': 'With', 'value': 22 },
    { 'name': 'Music', 'value': 21 },
    { 'name': 'Easy', 'value': 21 },
    { 'name': 'Chords', 'value': 21 },
    { 'name': 'el', 'value': 20 },
    { 'name': 'Advanced', 'value': 18 },
    { 'name': 'Level', 'value': 18 },
    { 'name': 'A', 'value': 17 },
    { 'name': 'Essentials', 'value': 16 },
    { 'name': 'Drum', 'value': 16 },
    { 'name': 'Rock', 'value': 16 },
    { 'name': 'la', 'value': 15 },
    { 'name': 'Your', 'value': 15 },
    { 'name': 'piano', 'value': 15 },
    { 'name': 'Playing', 'value': 14 },
    { 'name': 'Chord', 'value': 14 },
    { 'name': 'Rhythm', 'value': 14 },
    { 'name': 'Classical', 'value': 13 },
    { 'name': 'Curso', 'value': 13 },
    { 'name': 'Intermediate', 'value': 13 },
    { 'name': 'harmonica', 'value': 13 },
    { 'name': 'Jazz', 'value': 13 },
    { 'name': 'Acoustic', 'value': 13 },
    { 'name': 'en', 'value': 13 },
    { 'name': 'Ear', 'value': 12 },
    { 'name': 'Instruction', 'value': 12 },
    { 'name': 'Basics', 'value': 12 },
    { 'name': '3', 'value': 12 },
    { 'name': 'Fun', 'value': 12 },
    { 'name': 'Complete', 'value': 12 },
    { 'name': 'easy', 'value': 12 },
    { 'name': 'Techniques', 'value': 12 },
    { 'name': 'Made', 'value': 12 },
    { 'name': 'Runs', 'value': 11 },
    { 'name': 'love', 'value': 11 },
    { 'name': 'Scales', 'value': 11 },
    { 'name': 'Guide', 'value': 11 },
    { 'name': 'Start', 'value': 10 },
    { 'name': 'Part', 'value': 10 },
    { 'name': 'Studies', 'value': 10 },
    { 'name': 'Ukulele', 'value': 10 },
    { 'name': 'System', 'value': 10 },
    { 'name': 'Violin', 'value': 10 },
    { 'name': '12', 'value': 9 },
    { 'name': 'Trumpet', 'value': 9 },
    { 'name': 'Learning', 'value': 9 },
    { 'name': 'guitar', 'value': 9 },
    { 'name': 'Technique', 'value': 9 },
    { 'name': 'Way', 'value': 9 },
    { 'name': 'Flute', 'value': 9 },
    { 'name': 'Songs', 'value': 9 },
    { 'name': 'para', 'value': 9 },
    { 'name': 'Bass', 'value': 9 },
    { 'name': 'Series', 'value': 9 },
    { 'name': '5', 'value': 9 },
    { 'name': 'guitarra', 'value': 9 },
    { 'name': 'Step', 'value': 8 },
    { 'name': 'Bluegrass', 'value': 8 },
    { 'name': 'Improvise', 'value': 8 },
    { 'name': '4', 'value': 8 },
    { 'name': 'Guitarra', 'value': 8 },
    { 'name': 'By', 'value': 8 },
    { 'name': 'Hand', 'value': 8 },
    { 'name': 'Key', 'value': 8 },
    { 'name': 'Perform', 'value': 8 },
    { 'name': 'Building', 'value': 8 },
    { 'name': 'Under', 'value': 7 },
    { 'name': 'blues', 'value': 7 },
    { 'name': 'Strumming', 'value': 7 },
    { 'name': 'Electric', 'value': 7 },
    { 'name': 'learn', 'value': 7 },
    { 'name': 'Fundamentals', 'value': 7 },
    { 'name': 'You', 'value': 7 },
    { 'name': 'playing', 'value': 7 },
    { 'name': 'Three', 'value': 7 },
    { 'name': '30', 'value': 7 },
    { 'name': 'Webisodes', 'value': 7 },
    { 'name': 'From', 'value': 7 }],
    'Web Development': [{ 'name': 'Learn', 'value': 212 },
    { 'name': 'Web', 'value': 197 },
    { 'name': 'Build', 'value': 132 },
    { 'name': 'JavaScript', 'value': 112 },
    { 'name': 'Website', 'value': 105 },
    { 'name': 'Complete', 'value': 105 },
    { 'name': 'HTML', 'value': 105 },
    { 'name': 'Development', 'value': 100 },
    { 'name': 'PHP', 'value': 95 },
    { 'name': 'Beginners', 'value': 93 },
    { 'name': 'Course', 'value': 88 },
    { 'name': 'CSS', 'value': 83 },
    { 'name': 'Create', 'value': 80 },
    { 'name': 'WordPress', 'value': 80 },
    { 'name': 'How', 'value': 65 },
    { 'name': 'Bootstrap', 'value': 63 },
    { 'name': 'From', 'value': 62 },
    { 'name': 'A', 'value': 59 },
    { 'name': 'HTML5', 'value': 58 },
    { 'name': 'Scratch', 'value': 58 },
    { 'name': 'Angular', 'value': 56 },
    { 'name': 'For', 'value': 54 },
    { 'name': 'Wordpress', 'value': 51 },
    { 'name': 'To', 'value': 49 },
    { 'name': 'Developer', 'value': 44 },
    { 'name': 'Building', 'value': 43 },
    { 'name': 'Beginner', 'value': 43 },
    { 'name': '2', 'value': 42 },
    { 'name': 'Your', 'value': 41 },
    { 'name': 'With', 'value': 41 },
    { 'name': 'Websites', 'value': 40 },
    { 'name': 'Guide', 'value': 39 },
    { 'name': 'jQuery', 'value': 37 },
    { 'name': '4', 'value': 37 },
    { 'name': 'Introduction', 'value': 36 },
    { 'name': 'beginners', 'value': 36 },
    { 'name': 'Responsive', 'value': 35 },
    { 'name': 'using', 'value': 33 },
    { 'name': 'CSS3', 'value': 32 },
    { 'name': 'Using', 'value': 32 },
    { 'name': 'Projects', 'value': 32 },
    { 'name': 'Apps', 'value': 30 },
    { 'name': 'Programming', 'value': 30 },
    { 'name': 'Tutorial', 'value': 28 },
    { 'name': 'Ruby', 'value': 28 },
    { 'name': 'Professional', 'value': 28 },
    { 'name': 'Rails', 'value': 27 },
    { 'name': 'Framework', 'value': 27 },
    { 'name': 'Design', 'value': 27 },
    { 'name': 'App', 'value': 27 },
    { 'name': 'Master', 'value': 27 },
    { 'name': 'Coding', 'value': 26 },
    { 'name': 'React', 'value': 26 },
    { 'name': 'Laravel', 'value': 25 },
    { 'name': 'Mastering', 'value': 25 },
    { 'name': 'Advanced', 'value': 24 },
    { 'name': '3', 'value': 24 },
    { 'name': 'JS', 'value': 23 },
    { 'name': 'Javascript', 'value': 23 },
    { 'name': 'AngularJS', 'value': 23 },
    { 'name': 'Developers', 'value': 23 },
    { 'name': '5', 'value': 22 },
    { 'name': 'By', 'value': 22 },
    { 'name': 'Spring', 'value': 21 },
    { 'name': 'Become', 'value': 21 },
    { 'name': 'scratch', 'value': 21 },
    { 'name': 'Ultimate', 'value': 20 },
    { 'name': 'Crash', 'value': 20 },
    { 'name': 'Make', 'value': 20 },
    { 'name': 'Code', 'value': 19 },
    { 'name': 'And', 'value': 19 },
    { 'name': 'Python', 'value': 18 },
    { 'name': 'MVC', 'value': 18 },
    { 'name': 'website', 'value': 17 },
    { 'name': 'Basics', 'value': 17 },
    { 'name': 'MySQL', 'value': 17 },
    { 'name': 'Learning', 'value': 17 },
    { 'name': 'Theme', 'value': 17 },
    { 'name': 'Fundamentals', 'value': 17 },
    { 'name': 'Own', 'value': 17 },
    { 'name': 'Modern', 'value': 17 },
    { 'name': 'Project', 'value': 16 },
    { 'name': 'Application', 'value': 16 },
    { 'name': '1', 'value': 16 },
    { 'name': 'Page', 'value': 16 },
    { 'name': 'create', 'value': 16 },
    { 'name': 'Basic', 'value': 16 },
    { 'name': 'web', 'value': 16 },
    { 'name': '2017', 'value': 15 },
    { 'name': 'JSON', 'value': 14 },
    { 'name': 'JQuery', 'value': 14 },
    { 'name': 'Django', 'value': 14 },
    { 'name': 'Expert', 'value': 13 },
    { 'name': 'Creating', 'value': 13 },
    { 'name': 'Easy', 'value': 13 },
    { 'name': 'API', 'value': 13 },
    { 'name': 'Absolute', 'value': 13 },
    { 'name': 'Start', 'value': 13 },
    { 'name': 'Stack', 'value': 12 },
    { 'name': 'Security', 'value': 12 }]
}

数据处理文件 python (源 ipynb)

#!/usr/bin/env python
# coding: utf-8

# ## Loading DataSet and Getting Some informations about it

# In[4]:


import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import datetime as dt
import re
plt.style.use('bmh')
sns.set(style='darkgrid')
get_ipython().run_line_magic('matplotlib', 'inline')


# In[5]:


UDEMY_PATH = 'E:/学习资源/大三下-课程资料/数据可视化/大作业/input/udemy_courses.csv'
udemy_courses = pd.read_csv(UDEMY_PATH, parse_dates=['published_timestamp'])
udemy_courses.head(3)


# In[6]:


udemy_courses.info()


# ## Data Cleaning and Preparation for EDA

# In[7]:


# look like the data is clean enough,dont need to do any work.


# ## EDA
# ### Basic Knowledge EDA
# 
# - How many Free Courses in the dataset, and Explore which Category has the most free courses
# - How many Paid Courses in the dataset, and Explore which Category has the most paid courses
# - Compare the Average number of subscribers between Paid and Free Courses
# - How many Free/Paid Courses in each Level
# - Explore the distribution of price column
# - Average Prices for each level (Paid Category)
# - Relation between number of lectures and price.
# - Explore content duration and content duration for each price category
# - Published Courses each year.

# In[8]:


udemy_courses['is_paid'].value_counts()


# In[9]:


udemy_courses[udemy_courses['is_paid'] == False ]['subject'].value_counts()


# In[10]:


g = sns.catplot(x='subject', data=udemy_courses, kind='count', hue='is_paid')
g.fig.suptitle('free/paid categories comparison', y=1.03)
plt.xticks(rotation=30)
plt.show()


# Web Development 类别拥有最多数量的免费课程  
# Business Finance 类别拥有最多数量的付费课程

# In[11]:


pd.pivot_table(index='is_paid', values='num_subscribers', data=udemy_courses, aggfunc='mean')


# 免费课程的平均订阅数量多于付费课程的平均订阅数量,与我们预料的一样

# In[12]:


g = sns.catplot(x='level', data=udemy_courses, kind='count', hue='is_paid')
g.fig.suptitle('free/paid level comparison', y=1.03)
plt.xticks(rotation=30)
plt.show()


# In[13]:


# CDF, histogram, Box-plot, 
def cdf(lst):
    x = np.sort(lst)
    y = np.arange(1, len(x) + 1) / len(x)
    return x, y

fig, ax = plt.subplots(1, 3, figsize=(15,5))
x_price, y_price = cdf(udemy_courses['price'])
ax[0].plot(x_price, y_price)
ax[0].set_title('CDF of prices')
ax[1].hist(udemy_courses['price'])
ax[1].set_title('histogram distribution of prices')
ax[2].boxplot(udemy_courses['price'])
ax[2].set_title('boxplot of prices')
plt.show()

print('median: ', udemy_courses['price'].median())
print('mean', udemy_courses['price'].mean())


# In[14]:


udemy_courses[udemy_courses['is_paid'] == True].groupby('level')['price']     .mean().sort_values(ascending=False)


# In[15]:


price_category = []
for price in udemy_courses['price']:
    if price == 0:
        price_category.append('Free')
    elif price > 0 and price <= 45:
        price_category.append('cheap')
    elif price > 45 and price <= 95:
        price_category.append('expensive')
    else:
        price_category.append('very expensive')
udemy_courses['price_category'] = price_category

udemy_courses['price_category'].value_counts()


# In[16]:


# relation between number of lectures and price
udemy_courses.groupby('price_category')['num_lectures']    .mean().sort_values(ascending=False)


# In[17]:


year_counts = udemy_courses['published_timestamp'].dt.year.value_counts().plot.bar()
plt.xlabel('published year')
plt.ylabel('frequency')
plt.title('number of courses published each year(2011-2017)')
plt.show()


# In[18]:


udemy_courses['published_year'] = udemy_courses['published_timestamp'].dt.year
pd.pivot_table(index='published_year', columns='subject', values='course_id',           data=udemy_courses, aggfunc='count', fill_value=0)


# ## Export to JSON that Be Use for Echarts

# In[19]:


import json
udemy_courses.head(3)


# In[20]:


# all data to json file
# udemy_courses.to_json('data/udemy_courses.json', orient='records', indent=4)


# In[21]:


# 免费/付费 课程数量
data = udemy_courses['is_paid'].value_counts()
print(data)

# 每门学科的课程 是否付费 数量
data = udemy_courses.groupby(['subject', 'is_paid']).count()['course_id']
print(data)
print(list(data.index.levels[0]))
print(list(data.index.levels[1]))
print('values of True: ', list(data[:,True] ))
print('values of False: ', list(data[:,False] ))


# In[22]:


# 各主题课程的价格分布
subjects = list( udemy_courses['subject'].unique() )
print('max price of udemy courses is {}'.format(udemy_courses['price'].max()))
subject_price_counts = {}
for subject in subjects:
    prices = udemy_courses['price'][udemy_courses['subject'] == subject].values
    prices = list(prices)
    counts = pd.value_counts(prices).to_dict()
    price_counts = [ counts.get(i, 0) for i in range(0, 201)]
    print('\n price counts of {} subject are'.format(subject) )
    print(price_counts[:10])

    subject_price_counts[subject] = price_counts

# subject_price_counts['price'] = list(range(0, 201))
# print('\n ❤ json of subject-price-counts')
# print( json.dumps(subject_price_counts) )

print('\n ❤ narray about subject price counts')
narray = [] #[ [主题索引,价格,价格数量] ... ]
for k, v in subject_price_counts.items():
    subject_index = subjects.index(k)
    ls = [ [subject_index, i, value] for i, value in enumerate(v) if v != 0 ]
    narray.extend(ls)
print(subjects)
print(narray[:10])


# In[23]:



# 各课程等级的课程 是否付费 数量
data = udemy_courses.groupby(['level', 'is_paid']).count()['course_id']
print(data)
print(list(data.index.levels[0]))
print(list(data.index.levels[1]))
print('values of True: ', list(data[:,True] ))
print('values of False: ', list(data[:,False] ))


# In[24]:


# CDF, histogram, Box-plot, 
def cdf(lst):
    x = np.sort(lst)
    y = np.arange(1, len(x) + 1) / len(x)
    return x, y

def init_cdf():
    x_price, y_price = cdf(udemy_courses['price'])
    x_price = list(x_price)
    y_price = list( map(lambda x : round(x, 2), y_price) )
    with open('data/output', 'w', encoding='utf-8') as f:
        f.write( str(x_price))
        f.write('\n\n')
        f.write( str(y_price) )
        print('已保存至文件 data/output')
    print(x_price[:10])
    print(y_price[:10])
# init_cdf()

def init_hist():
    price = udemy_courses['price'].values
    labels = ['0-25', '25-50', '50-75', '75-100', '100-125', '125-150', '150-175', '175-200']
    price = pd.cut(price, bins=[0, 25,50,75,100,125,150,175,200], labels=labels)
    price_count = pd.value_counts(price).sort_index()
    print( list(price_count.index.values))
    print(list(price_count))
# init_hist()

def init_quantitle():
    price = udemy_courses['price']
    data = price.quantile([0,0.25,0.5,0.75,1])
    print(list(data))
# init_quantitle()


# In[25]:


# 各年份的 各 主题课程发布量
data = udemy_courses.groupby(['published_year', 'subject']).count()['course_id']
# data = data.sort_index(ascending=False, level=0)
print(data)
published_years = list(data.index.levels[0])
subjects = data.index.levels[1].values
print(published_years)
print(subjects)

subject_year_count = {}
for subject in subjects:
    print(' {} value are'.format(subject))
    ls = list(data[:, subject])
    if len(ls) != len(published_years):
        ls.insert(0,0)
    print(ls)
    subject_year_count[subject] = ls

subject_year_count['year'] = published_years
print(subject_year_count)

# print('values of True: ', list(data[:,True] ))
# print('values of False: ', list(data[:,False] ))


# In[26]:


# 各课程类别的 课程 关键字云图
import nltk
from nltk.corpus import stopwords
import functools

stop_words = stopwords.words('english')
stop_words.extend(['The', '-', '&'])

subject_word_count = {}
for subject in subjects:
    print(' {} subject '.format(subject))
    titles = udemy_courses['course_title'][ udemy_courses['subject'] == subject ]
    titles = map(lambda s : s.split(), titles)
    words = []
    for title in titles:
        words.extend(title)
    words = list(filter(lambda s : s not in stop_words and s.isalnum(), words))
    word_counts = pd.value_counts(words)[:100]
    print(len(word_counts))
    
    data = []
    for k, v in word_counts.items():
        data.append( {'name': k, 'value': v} )
    subject_word_count[subject] = data

subject_word_count

 

你可能感兴趣的:(Projects)