def get_sunburst_data(self):
        sun_data = []
        statuses = Achieve.objects.all()
        for status in statuses:
            type_value = {}
            for v in self.type_list:
                type_value.update({v.name: 0})

            events = status.event.get_queryset()

            for event in events:
                type_value[event.type.name] += 1

            time_list = []
            for key in type_value.keys():
                if type_value[key]:
                    single = opts.SunburstItem(name=key, value=type_value[key])
                    time_list.append(single)

            if len(time_list):
                name = status.name
                s_item = opts.SunburstItem(name=name, children=time_list)
                sun_data.append(s_item)

        return sun_data
Example #2
0
def get_sun_data(request):
    sun_choice = request.GET.get("sun-choice")
    street = Street.objects.get(name=sun_choice)
    sun_data = []
    statuses = Achieve.objects.all()
    type_list = Type.objects.all()
    for status in statuses:
        type_value = {}
        for v in type_list:
            type_value.update({v.name: 0})

        events = status.event.get_queryset()

        for event in events:
            if event.community.street != street:
                continue
            type_value[event.type.name] += 1

        time_list = []
        for key in type_value.keys():
            if type_value[key]:
                single = opts.SunburstItem(name=key, value=type_value[key])
                time_list.append(single)

        if len(time_list):
            name = status.name
            s_item = opts.SunburstItem(name=name, children=time_list)
            sun_data.append(s_item)

    start = datetime.datetime.now()
    data = sun_data
    c = (Sunburst().add(
        series_name="", data_pair=data,
        radius=[0, "90%"]).set_series_opts(label_opts=opts.LabelOpts(
            formatter="{b}")).dump_options_with_quotes())
    end = datetime.datetime.now()
    print("Sunburst: " + str(end - start))
    return HttpResponse(c, content_type='application/json')
Example #3
0
def sunburst_base() -> Sunburst:
    data = [
        opts.SunburstItem(
            name="云顶书院",
            children=[
                opts.SunburstItem(
                    name="大数据学院",
                    value=15,
                    children=[
                        opts.SunburstItem(name="Cousin Jack", value=2),
                        opts.SunburstItem(
                            name="Cousin Mary",
                            value=5,
                            children=[opts.SunburstItem(name="Jackson", value=2)],
                        ),
                        opts.SunburstItem(name="Cousin Ben", value=4),
                    ],
                ),
                opts.SunburstItem(
                    name="机械学院",
                    value=10,
                    children=[
                        opts.SunburstItem(name="Me", value=5),
                        opts.SunburstItem(name="Brother Peter", value=1),
                    ],
                ),
            ],
        ),
    ]

    c = (
        Sunburst(init_opts=opts.InitOpts(width="1000px", height="600px"))
            .add(series_name="", data_pair=data, radius=[0, "90%"])
            .set_global_opts(title_opts=opts.TitleOpts(title="Sunburst-基本示例"))
            .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}"))
    )
    return c
Example #4
0
"""

data = [
    opts.SunburstItem(
        name="Grandpa",
        children=[
            opts.SunburstItem(
                name="Uncle Leo",
                value=15,
                children=[
                    opts.SunburstItem(name="Cousin Jack", value=2),
                    opts.SunburstItem(
                        name="Cousin Mary",
                        value=5,
                        children=[opts.SunburstItem(name="Jackson", value=2)],
                    ),
                    opts.SunburstItem(name="Cousin Ben", value=4),
                ],
            ),
            opts.SunburstItem(
                name="Father",
                value=10,
                children=[
                    opts.SunburstItem(name="Me", value=5),
                    opts.SunburstItem(name="Brother Peter", value=1),
                ],
            ),
        ],
    ),
    opts.SunburstItem(
        name="Nancy",
        children=[
Example #5
0
def gender_direction() -> Sunburst:
    directions = ['开发', '设计', '秘书处']
    genders = ['男', '女']
    directionList = []
    for i in directions:
        Dname = i
        Dvalue = Freshman.objects.filter(direction=Dname)
        genderList = []
        for j in genders:
            r = str(random.randint(0, 255))
            g = str(random.randint(0, 255))
            b = str(random.randint(0, 255))
            Gvalue = Dvalue.filter(gender=j)
            genderList.append(
                opts.SunburstItem(
                    name=j,
                    value=len(Gvalue),
                    itemstyle_opts=opts.ItemStyleOpts(
                        color="rgb({0},{1},{2})".format(r, g, b))), )
        r = str(random.randint(0, 255))
        g = str(random.randint(0, 255))
        b = str(random.randint(0, 255))
        directionList.append(
            opts.SunburstItem(name=i,
                              value=len(Dvalue),
                              children=genderList,
                              itemstyle_opts=opts.ItemStyleOpts(
                                  color="rgb({0},{1},{2})".format(r, g, b))))
    data = [opts.SunburstItem(name="云顶书院", children=directionList)]
    c = (Sunburst(init_opts=opts.InitOpts(width="1000px", height="600px")).add(
        series_name="",
        data_pair=data,
        radius=[0, "90%"],
        levels=[
            {},
            {
                "r0": "15%",
                "r": "35%",
                "itemStyle": {
                    "borderWidth": 2
                },
                "label": {
                    "rotate": "tangential"
                },
            },
            {
                "r0": "35%",
                "r": "70%",
                "label": {
                    "align": "right"
                }
            },
            {
                "r0": "70%",
                "r": "72%",
                "label": {
                    "position": "outside",
                    "padding": 3,
                    "silent": False
                },
                "itemStyle": {
                    "borderWidth": 3
                },
            },
        ],
    ).set_global_opts(title_opts=opts.TitleOpts(title="学院专业")).set_series_opts(
        label_opts=opts.LabelOpts(formatter="{b}")))
    return c
Example #6
0
def major_academy() -> Sunburst:
    colleges = Academy.objects.all()
    collegeList = []
    for i in range(0, len(colleges)):
        Aname = colleges[i].academy
        Avalue = Freshman.objects.filter(college=Aname)
        majors = Major.objects.filter(majorAcademy_id=colleges[i].id)
        majorList = []
        for j in range(0, len(majors)):
            Mname = majors[j].major
            Mvalue = Avalue.filter(major=Mname)
            r = str(random.randint(0, 255))
            g = str(random.randint(0, 255))
            b = str(random.randint(0, 255))
            majorList.append(
                opts.SunburstItem(
                    name=Mname,
                    value=len(Mvalue),
                    itemstyle_opts=opts.ItemStyleOpts(
                        color="rgb({0},{1},{2})".format(r, g, b))))  # 专业数据
        r = str(random.randint(0, 255))
        g = str(random.randint(0, 255))
        b = str(random.randint(0, 255))
        collegeList.append(
            opts.SunburstItem(
                name=Aname,
                value=len(Avalue),
                children=majorList,
                itemstyle_opts=opts.ItemStyleOpts(
                    color="rgb({0},{1},{2})".format(r, g, b))))  # 学院数据
    data = [opts.SunburstItem(name="云顶书院", children=collegeList)]
    c = (Sunburst(init_opts=opts.InitOpts(width="1000px", height="600px")).add(
        series_name="",
        data_pair=data,
        radius=[0, "90%"],
        levels=[
            {},
            {
                "r0": "15%",
                "r": "35%",
                "itemStyle": {
                    "borderWidth": 2
                },
                "label": {
                    "rotate": "tangential"
                },
            },
            {
                "r0": "35%",
                "r": "70%",
                "label": {
                    "align": "right"
                }
            },
            {
                "r0": "70%",
                "r": "72%",
                "label": {
                    "position": "outside",
                    "padding": 3,
                    "silent": False
                },
                "itemStyle": {
                    "borderWidth": 3
                },
            },
        ],
    ).set_global_opts(title_opts=opts.TitleOpts(title="学院专业")).set_series_opts(
        label_opts=opts.LabelOpts(formatter="{b}")))
    return c
def test_sunburst_dataitem():
    item_name = "test_data_item"
    item = opts.SunburstItem(name=item_name)
    eq_(item.opts.get("name"), item_name)
def sunburst_base() -> Sunburst:
    data = [
        opts.SunburstItem(
            name="Grandpa",
            children=[
                opts.SunburstItem(
                    name="Uncle Leo",
                    value=15,
                    children=[
                        opts.SunburstItem(name="Cousin Jack", value=2),
                        opts.SunburstItem(
                            name="Cousin Mary",
                            value=5,
                            children=[opts.SunburstItem(name="Jackson", value=2)],
                        ),
                        opts.SunburstItem(name="Cousin Ben", value=4),
                    ],
                ),
                opts.SunburstItem(
                    name="Father",
                    value=10,
                    children=[
                        opts.SunburstItem(name="Me", value=5),
                        opts.SunburstItem(name="Brother Peter", value=1),
                    ],
                ),
            ],
        ),
        opts.SunburstItem(
            name="Nancy",
            children=[
                opts.SunburstItem(
                    name="Uncle Nike",
                    children=[
                        opts.SunburstItem(name="Cousin Betty", value=1),
                        opts.SunburstItem(name="Cousin Jenny", value=2),
                    ],
                )
            ],
        ),
    ]

    c = (
        Sunburst()
        .add(series_name="", data_pair=data, radius=[0, "90%"])
        .set_global_opts(title_opts=opts.TitleOpts(title="Sunburst-基本示例"))
        .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}"))
    )
    return c
Example #9
0
def test_sunburst_dataitem():
    item_name = "test_data_item"
    item = opts.SunburstItem(name=item_name)
    assert_equal(item.opts.get("name"), item_name)
Example #10
0
def get_charts():
    try:
        username = request.args['username']
        password = request.args['password']
        host = request.args['host']
        year = int(request.args['year'], 10)
    except:
        return None

    # login
    e = Email(host, username, password)
    e.login()

    # get the raw data
    status, mailboxs = e.getMailboxs()
    emails = {}
    for mailbox in mailboxs:
        status, emails[mailbox] = e.getEmailsIn(mailbox, year)
    begin, end = utils.getTimeThisYear(year)
    mailbox_idx = {mailboxs[i]: i for i in range(len(mailboxs))}

    # logout
    e.logout()

    # pre info
    most_email_time = '晚上'
    morning_email_num = 0
    noon_email_num = 0
    afternoon_email_num = 0
    night_email_num = 0

    most_email_month = 1
    max_month_email_num = 0
    month_email_num = [0 for i in range(13)]

    # get calendar chart
    calendar_data = [[str(begin + datetime.timedelta(days=i)), 0]
                     for i in range((end - begin).days + 1)]

    sunburst_tmp_data = {
        'Morning': {},
        'Noon': {},
        'Afternoon': {},
        'Night': {}
    }
    radar_data = {}

    email_max_number = 5
    copy_max_number = 5
    copied_max_number = 5
    receiver_max_num = 5
    mail_server_max_number = 5
    timeline_max = 5

    timeline_data = [[[0 for i in range(len(mailboxs))],
                      [0 for i in range(len(mailboxs))]] for i in range(13)]
    wordcloud_tmp_data = {}

    for mailbox in mailboxs:
        receiver = []
        mail_server = []
        email_number = 0
        copy_number = 0
        copied_number = 0

        idx = mailbox_idx[mailbox]
        for email in emails[mailbox]:
            # calendar
            calendar_data[(email[-1].date() - begin).days][1] += 1

            # sunburst
            period = 'Morning'
            recv_hour = email[-1].hour
            if recv_hour >= 8 and recv_hour <= 12:
                period = 'Morning'
                morning_email_num += 1
            elif recv_hour >= 13 and recv_hour <= 14:
                period = 'Noon'
                noon_email_num += 1
            elif recv_hour >= 15 and recv_hour <= 18:
                period = 'Afternoon'
                afternoon_email_num += 1
            else:
                period = 'Night'
                night_email_num += 1
            email_pre, email_suffix = utils.getSuffix(email[1])

            if mailbox not in sunburst_tmp_data[period]:
                sunburst_tmp_data[period][mailbox] = {}

            if email_suffix not in sunburst_tmp_data[period][mailbox]:
                sunburst_tmp_data[period][mailbox][email_suffix] = 0

            sunburst_tmp_data[period][mailbox][email_suffix] += 1

            # radar
            receiver.append(email[1])
            receiver.append(email[2])

            email_pre, email_suffix = utils.getSuffix(email[1])
            mail_server.append(email_suffix)
            email_pre, email_suffix = utils.getSuffix(email[2])
            mail_server.append(email_suffix)

            email_number += 1
            if email[3] != '':
                copy_number += 1
            if username in email[3]:
                copied_number += 1

            # scatter
            if email[-1].hour >= 8 and email[-1].hour <= 17:
                timeline_data[email[-1].month][0][idx] += 1
            else:
                timeline_data[email[-1].month][1][idx] += 1

            timeline_max = max(timeline_max,
                               timeline_data[email[-1].month][0][idx])
            timeline_max = max(timeline_max,
                               timeline_data[email[-1].month][1][idx])
            month_email_num[email[-1].month] += 1

            # wordcloud
            seg_list = jieba.cut(email[0])
            for seg in seg_list:
                if seg not in STOPWORDS and seg not in PUNCTUATIONS:
                    if seg not in wordcloud_tmp_data:
                        wordcloud_tmp_data[seg] = 1
                    else:
                        wordcloud_tmp_data[seg] += 1

        receiver = set(receiver)
        mail_server = set(mail_server)

        receiver_num = len(receiver)
        mail_server_number = len(mail_server)

        radar_data[mailbox] = [[
            email_number, copy_number, copied_number, receiver_num,
            mail_server_number
        ]]

        email_max_number = max(email_max_number, email_number)
        copy_max_number = max(copy_max_number, copy_number)
        copied_max_number = max(copied_max_number, copied_number)
        receiver_max_num = max(receiver_max_num, receiver_num)
        mail_server_max_number = max(mail_server_max_number,
                                     mail_server_number)

    # sunburst
    sunburst_data = []
    for period in sunburst_tmp_data:
        mailbox_list = []
        for mailbox in sunburst_tmp_data[period]:
            suffix_list = []

            for suffix in sunburst_tmp_data[period][mailbox]:
                suffix_list.append(
                    opts.SunburstItem(
                        name=suffix,
                        value=sunburst_tmp_data[period][mailbox][suffix]))

            if len(mailbox) <= 15:
                mailbox_list.append(
                    opts.SunburstItem(name=mailbox, children=suffix_list))
            else:
                mailbox_list.append(
                    opts.SunburstItem(name='...' + mailbox[-12:-1],
                                      children=suffix_list))

        sunburst_data.append(
            opts.SunburstItem(name=period, children=mailbox_list))

    max_time_email_num = max(max(morning_email_num, noon_email_num),
                             max(afternoon_email_num, night_email_num))
    if max_time_email_num == morning_email_num:
        most_email_time = '上午'
    elif max_time_email_num == noon_email_num:
        most_email_time = '中午'
    elif max_time_email_num == afternoon_email_num:
        most_email_time = '下午'
    elif max_time_email_num == night_email_num:
        most_email_time = '晚上'

    max_month_email_num = 0
    for i in range(1, 13):
        if month_email_num[i] > max_month_email_num:
            max_month_email_num = month_email_num[i]
            most_email_month = i

    #wordcloud
    wordcloud_data = []
    for word in wordcloud_tmp_data:
        if wordcloud_tmp_data[word] >= 3:
            wordcloud_data.append((word, wordcloud_tmp_data[word]))

    # get the chart and  pages
    sunbudrt_chart = sunburst_base(sunburst_data)
    calendar_chart = calendar_base(calendar_data, begin.year)
    radar_chart = radar_base(radar_data, email_max_number + 3,
                             copy_max_number + 3, copied_max_number + 3,
                             receiver_max_num + 3, mail_server_max_number + 3)
    scatter_chart = scatter_base(timeline_data, mailboxs, timeline_max)
    wordcloud_chart = wordcloud_base(wordcloud_data)

    period = '"这一年,不同的时段,不同的邮箱,不同的来源。似乎你在 %s 更忙碌"' % (most_email_time)
    month = '"每个月都有不同的事情,好像 %d 月是这一年最忙碌的一月"' % (most_email_month)

    return '{"calendar" : %s, "sunburst" : %s, "radar" : %s, "scatter" : %s, "wordcloud" : %s, "month" : %s , "period" : %s}' % (
        calendar_chart.dump_options_with_quotes(),
        sunbudrt_chart.dump_options_with_quotes(),
        radar_chart.dump_options_with_quotes(),
        scatter_chart.dump_options_with_quotes(),
        wordcloud_chart.dump_options_with_quotes(), month, period)
Example #11
0
def hickey_sunburst() -> Sunburst:
    data = [
        opts.SunburstItem(
            name='贾演',
            value=90,
            children=[
                opts.SunburstItem(
                    name='贾代化',
                    value=85,
                    children=[
                        opts.SunburstItem(
                            name='贾敬',
                            value=75,
                            children=[
                                opts.SunburstItem(
                                    name='贾珍',
                                    value=45,
                                    children=[
                                        opts.SunburstItem(
                                            name='贾蓉',
                                            value=20,
                                        ),
                                        opts.SunburstItem(
                                            name='秦可卿(外)',
                                            value=5,
                                        ),
                                    ],
                                ),
                                opts.SunburstItem(
                                    name='尤氏(继配)',
                                    value=39,
                                    children=[
                                        opts.SunburstItem(
                                            name='尤二姐',
                                            value=17,
                                        ),
                                        opts.SunburstItem(
                                            name='尤三姐',
                                            value=15,
                                        ),
                                    ],
                                ),
                                opts.SunburstItem(
                                    name='贾惜春',
                                    value=35,
                                ),
                            ],

                        ),
                    ],
                ),
            ],
        ),
    ]
    sunburst = (
        Sunburst()
            .add(
            series_name='红楼梦',
            data_pair=data,
            radius=['10%', '70%'], )
            .set_global_opts(title_opts=opts.TitleOpts(title='红楼梦谱系图'),
                             toolbox_opts=opts.ToolboxOpts(is_show=True),
                             )
        # .set_series_opts(label_opts=opts.LabelOpts(formatter={'b'}))
    )
    return sunburst