Esempio n. 1
0
def ewide4(request):
    # gauge = Gauge("仪表盘示例")
    # gauge.add("业务指标", "完成率", 66.66)
    # gauge.show_config()
    template = loader.get_template('ewpyecharts.html')
    data = [
        ('北京', 28), ('天津', 29), ('石家庄', 29), ('太原', 34), ('呼和浩特', 27), ('哈尔滨', 31), ('长春', 29), ('沈阳', 30), ('上海', 40),
        ('合肥', 40), ('南京', 40), ('济南', 35), ('青岛', 33), ('杭州', 40), ('福州', 37), ('厦门', 34), ('南昌', 39), ('武汉', 38),
        ('长沙', 39),
        ('郑州', 37), ('南宁', 36), ('广州', 33), ('深圳', 28), ('珠海', 30), ('海口', 30), ('三亚', 31), ('西安', 39), ('兰州', 32),
        ('乌鲁木齐', 31),
        ('西宁', 27), ('银川', 30), ('成都', 32), ('重庆', 38), ('贵阳', 29), ('昆明', 22), ('拉萨', 23), ('香港', 30), ('澳门', 30), ]
    #
    # geo = Geo("7月23日全国主要城市最高气温", "数据源自中国天气网", title_color="#000000", title_pos="center",
    #           width=1200, height=600, background_color='#FFFFFF')
    # attr, value = geo.cast(data)
    # geo.add("", attr, value, visual_range=[20, 40], visual_text_color="#000000", symbol_size=15, is_visualmap=True)
    # geo.show_config()

    geo = Geo("全国主要城市空气质量", "data from pm2.5", title_color="#fff",
              title_pos="center", width=1200,
              height=600, background_color='#404a59')
    attr, value = geo.cast(data)
    geo.add("", attr, value, type="heatmap", is_visualmap=True, visual_range=[0, 300],
            visual_text_color='#fff')

    # data = [
    #     ('汕头市', 50), ('汕尾市', 60), ('揭阳市', 35),
    #     ('阳江市', 44), ('肇庆市', 72)
    # ]
    # geo = Geo("广东城市空气质量", "data from pm2.5", title_color="#fff",
    #           title_pos="center", width=1200,
    #           height=600, background_color='#404a59')
    # attr, value = geo.cast(data)
    # geo.add("", attr, value, maptype='广东', type="effectScatter",
    #         is_random=True, effect_scale=5, is_legend_show=False)
    # # geo.show_config()

    context = dict(
        myechart=geo.render_embed(),
        host=REMOTE_HOST,
        script_list=geo.get_js_dependencies()
    )
    return HttpResponse(template.render(context, request))
Esempio n. 2
0
class PlotGeo:
    def __init__(self):
        self.data = {{'label': []}, }
        self.titles = ['全国销售情势图', 'data from sale']
        self.indexes = []
        self.geo = Geo()
        self.script_list = self.geo.get_js_dependencies()

    def plot_geo(self, dat, tit, ind):
        self.data = dat
        self.titles = tit
        self.indexes = ind
        self.geo = Geo(self.titles[0], self.titles[1],
                       title_pos='center', title_color='#fff',
                       width=1200, height=600, background_color='#404a59')
        for label in self.data.keys():
            self.geo.add(label, self.indexes, self.data[label],
                         visual_range=[0, 200], visual_text_color='#fff',
                         symbol_size=15, is_visualmap=True)
        return self.geo.render_embed()
Esempio n. 3
0
def geo_echarts(request):
    if not request.session.get('is_login', None):
        # 如果本来就未登录,也就没有登出一说
        return redirect("/login/")
    if request.method == 'GET':
        ptime = request.GET.get('time')
        ptype = request.GET.get('type')
        phour = request.GET.get('hour')
        client = pymongo.MongoClient('localhost', 27017)
        db = client['earthquake']
        col = db['geo_' + ptime]
        lon = []
        lat = []
        value = []
        cities = []
        print(col.count())
        for item in col.find():
            if item['index'] < int(phour):
                lon.append(item['lon'])
                lat.append(item['lat'])
                cities.append(item['city'])
                value.append(item['value'])

        style = Style(title_color="#fff",
                      title_pos="center",
                      width=1000,
                      height=800,
                      background_color="#404a59")

        df_dic = {'lon': lon, 'lat': lat, 'city': cities, 'value': value}
        df = pd.DataFrame(df_dic)
        print(df)
        attr = list(df['city'])
        value = list(df['value'])
        geo_coords = {
            df.iloc[i]['city']: [df.iloc[i]['lat'], df.iloc[i]['lon']]
            for i in range(len(df))
        }
        if ptype == "0":
            # normal
            total_geo = Geo(ptime + '地震' + str(phour) + '小时内分布图',
                            **style.init_style)
            total_geo.add("",
                          attr,
                          value,
                          visual_range=[1, 10],
                          symbol_size=5,
                          visual_text_color="#fff",
                          is_visualmap=True,
                          maptype='china',
                          visual_split_number=10,
                          geo_cities_coords=geo_coords)
        elif ptype == "1":
            # heatmap
            total_geo = Geo(ptime + '地震' + str(phour) + '小时内热力分布图',
                            **style.init_style)
            total_geo.add("",
                          attr,
                          value,
                          visual_range=[1, 10],
                          symbol_size=5,
                          visual_text_color="#fff",
                          type="heatmap",
                          is_visualmap=True,
                          maptype='china',
                          visual_split_number=10,
                          geo_cities_coords=geo_coords)

        context = dict(myechart=total_geo.render_embed(),
                       host=REMOTE_HOST,
                       script_list=total_geo.get_js_dependencies())
        return render(request, "function/echart_base.html", context)
    def geographical_distribution(self, time):
        dir_name = time[0:4] + time[5:7] + time[8:10]
        lon, lat, doc, tag, content, ttime, cities = self.load_doc(time)
        SI_value = []
        for item, tag in zip(doc, tag):
            SI_value.append(self.SI.SI_content_2(item, tag))
        vs = SI_value.copy()
        vs.sort()
        minSI = vs[0]
        vs.sort(reverse=True)
        maxSI = vs[0]
        print(SI_value)
        print('max-', maxSI, 'min- ', minSI)
        for i in range(len(SI_value)):
            if SI_value[i] > 12:
                SI_value[i] = 12
            else:
                SI_value[i] = 10*(SI_value[i]-minSI)/(12-minSI)
        if len(lon) > 7000:
            wlon = []
            wlat = []
            wttime = []
            wcities = []
            wSI_value = []
            for ilon, ilat, ittime, icities, ivalue in zip(lon, lat, ttime, cities, SI_value):
                if ivalue > 1.5:
                    wlon.append(ilon)
                    wlat.append(ilat)
                    wttime.append(ittime)
                    wcities.append(icities)
                    wSI_value.append(ivalue)
            lon = wlon
            lat = wlat
            ttime = wttime
            cities = wcities
            SI_value = wSI_value

        df_dic = {'lon': lon, 'lat': lat,  'time': ttime, 'city': cities, 'value': SI_value}
        df = pd.DataFrame(df_dic)
        print(df)
        geo_coords = {df.iloc[i]['city']: [df.iloc[i]['lat'], df.iloc[i]['lon']] for i in range(len(df))}
        attr = list(df['city'])
        value = list(df['value'])
        vrange = [0, 0, 0, 0, 0]
        for i in range(len(df)):
            if df.iloc[i]['value'] > 8:
                vrange[0] += 1
            elif df.iloc[i]['value'] > 6:
                vrange[1] += 1
            elif df.iloc[i]['value'] > 4:
                vrange[2] += 1
            elif df.iloc[i]['value'] > 2:
                vrange[3] += 1
            else:
                vrange[4] += 1
        print('percentage:')
        for item in vrange:
            print(item/len(df)*100, '%')
        if self.outputDB.find_one({'name': self.tableName}):
            self.outputDB.update_one({'name': self.tableName}, {'$set': {
                                                                'time': time,
                                                                'SI-V': vrange[0]/len(df),
                                                                'SI-IV': vrange[1]/len(df),
                                                                'SI-III': vrange[2]/len(df),
                                                                'SI-II': vrange[3]/len(df),
                                                                'SI-I': vrange[4]/len(df),
                                                                }})
        else:
            self.outputDB.insert_one({'name': self.tableName,
                                      'time': time,
                                      'SI-V': vrange[0]/len(df),
                                      'SI-IV': vrange[1]/len(df),
                                      'SI-III': vrange[2]/len(df),
                                      'SI-II': vrange[3]/len(df),
                                      'SI-I': vrange[4]/len(df),
                                      })

        if not os.path.exists(dir_name + '/'):
            print("make new dir")
            os.makedirs(dir_name + '/')
        style = Style(title_color="#fff", title_pos="center",
                      width=800, height=800, background_color="#404a59")
        total_geo = Geo('总体分布图', **style.init_style)
        total_geo.add("", attr, value, visual_range=[1, 10], symbol_size=5,
                      visual_text_color="#fff",
                      is_visualmap=True, maptype='china', visual_split_number=10,
                      geo_cities_coords=geo_coords)
        total_geo.render(dir_name + '/' + dir_name+'_all.html')
        # heatmap
        htotal_geo = Geo('总体热力分布图', **style.init_style)
        htotal_geo.add("", attr, value, visual_range=[1, 10], symbol_size=5,
                      visual_text_color="#fff", type="heatmap",
                      is_visualmap=True, maptype='china', visual_split_number=10,
                      geo_cities_coords=geo_coords)
        arg = htotal_geo.get_js_dependencies()

        htotal_geo.render(dir_name + '/' + dir_name + '_allH.html')
        start_time = datetime.strptime(time, "%Y-%m-%d %H:%M:%S")
        current_time = start_time
        timeIndex = []
        timeDoc = []
        for i in range(7):
            current_time = current_time + timedelta(hours=1)
            timeIndex.append(current_time)
            timeDoc.append([])

        for ilon, ilat, ittime, icities, ivalue in zip(lon, lat, ttime, cities, SI_value):
            for i in range(7):
                if i == 6 or ittime < timeIndex[i+1]:
                    timeDoc[i].append([ilon, ilat, ittime, icities, ivalue])

        for i in range(6):
            print("in hour ", i, 'has', len(timeDoc[i]))
            tlon = []
            tlat = []
            tttime = []
            tcities = []
            tvalue = []
            for sdoc in timeDoc[i]:
                tlon.append(sdoc[0])
                tlat.append(sdoc[1])
                tttime.append(sdoc[2])
                tcities.append(sdoc[3])
                tvalue.append(sdoc[4])
            tdf_dic = {'lon': tlon, 'lat': tlat, 'time': tttime, 'city': tcities, 'value': tvalue}
            tdf = pd.DataFrame(tdf_dic)
            tgeo_coords = {tdf.iloc[i]['city']: [tdf.iloc[i]['lat'], tdf.iloc[i]['lon']] for i in range(len(tdf))}
            tattr = list(tdf['city'])
            tvalue = list(tdf['value'])
            tgeo = Geo(str(i+1) + '小时内分布图', **style.init_style)
            tgeo.add("", tattr, tvalue, visual_range=[5, 10], symbol_size=3,
                     visual_text_color="#fff",
                     is_visualmap=True, maptype='china', visual_split_number=10,
                     geo_cities_coords=tgeo_coords)
            tgeo.render(dir_name + '/ ' + dir_name + str(i+1) + 'h.html')
            # heatmap
            htgeo = Geo(str(i + 1) + '小时内热力分布图', **style.init_style)
            htgeo.add("", tattr, tvalue, visual_range=[5, 10], symbol_size=3,
                     visual_text_color="#fff", type='heatmap',
                     is_visualmap=True, maptype='china', visual_split_number=10,
                     geo_cities_coords=tgeo_coords)
            htgeo.render(dir_name + '/ ' + dir_name + str(i + 1) + 'H.html')