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
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')
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
""" 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=[
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
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
def test_sunburst_dataitem(): item_name = "test_data_item" item = opts.SunburstItem(name=item_name) assert_equal(item.opts.get("name"), item_name)
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)
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