Exemplo n.º 1
0
def locate_on_map(addr, longtitude, latitude):
    g = Geo().add_schema(maptype="上海")
    g.add_coordinate(addr, longtitude, latitude)
    data_pair = [(addr, 1)]
    g.add('', data_pair, type_=GeoType.EFFECT_SCATTER, symbol_size=20)
    g.set_series_opts(label_opts=options.LabelOpts(is_show=False))
    g.set_global_opts(title_opts=options.TitleOpts(title="地图标点测试"))

    g.render_notebook()
    print("process finished")
Exemplo n.º 2
0
def quakes():
    # 对地震数据进行绘图
    quakes_data = pd.read_csv("quakes.csv")
    latitude = quakes_data['lat'].values
    longitude = quakes_data['long'].values
    mag = quakes_data['mag'].values
    index = list(range(len(mag)))

    #可视化
    geo = Geo()
    geo.add_schema(maptype='world')
    for i in range(len(index)):
        geo.add_coordinate(index[i], longitude[i], latitude[i])

    data_pair = [list(z) for z in zip(index, mag)]
    # 将数据添加进图中
    geo.add('震源', data_pair, symbol_size=3)
    geo.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
    # 设置显示区间
    pieces = [
        {
            'max': 4,
            'label': '4级以下',
            'color': '#50A3BA'
        },
        {
            'min': 4,
            'max': 5,
            'label': '4-5级',
            'color': '#E2C568'
        },
        {
            'min': 5,
            'max': 6,
            'label': '5-6级',
            'color': '#D94E5D'
        },
        {
            'min': 6,
            'max': 7,
            'label': '6-7级',
            'color': '#3700A4'
        },
        {
            'min': 7,
            'label': '7级以上',
            'color': '#81AE9F'
        },
    ]
    geo.set_global_opts(visualmap_opts=opts.VisualMapOpts(is_piecewise=True,
                                                          pieces=pieces),
                        title_opts=opts.TitleOpts(title="震源分布"))
    #导出图像
    geo.render('地震地点分布.html')
Exemplo n.º 3
0
def base_info():
    geo = Geo()
    geo.add_schema(maptype="河南")  # 加入自定义的点,格式为
    # 地图形式 type_=ChartType.HEATMAP
    geo.add("geo", data, type_=ChartType.EFFECT_SCATTER)
    # is_show:是否显示经纬度
    geo.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
    geo.set_global_opts(visualmap_opts=opts.VisualMapOpts(max_=10),
                        title_opts=opts.TitleOpts(title="Geo-河南省地图"))

    return geo
Exemplo n.º 4
0
def out_data(date_number):
    city_list = ('南宁市', '柳州市', '桂林市', '梧州市', '北海市', '防城港市', '钦州市', '贵港市',
                 '玉林市', '百色市', '贺州市', '河池市', '来宾市', '崇左市')
    city_od_list_pro = []
    city_od_values_pro = []
    for i in city_list:
        city = i
        workbook = xlrd.open_workbook(f'.\\{path}\\{city}-迁入来源地规模指数.xlsx')
        sheet = workbook.sheet_by_index(0)
        city_od_list = []
        city_od_values = []
        a = 0
        cols = sheet.col_values(1)[1:]
        cols_date = sheet.col_values(date_number + 1)[1:]
        for j in cols:
            city_od = (city, j)
            city_od_v = (j, cols_date[a])
            city_od_list.append(city_od)
            city_od_values.append(city_od_v)
            a += 1
        city_od_list_pro.append(city_od_list)
        city_od_values_pro.append(city_od_values)
    od_list = []
    os_values = []
    for i in range(14):
        for j in range(14):
            od_list.append(city_od_list_pro[i][j])
            os_values.append(city_od_values_pro[i][j])
    # print(od_list)
    # print(os_values)
    geo = Geo()
    # 地图类型,世界地图可换为world
    geo.add_schema(maptype="广西")
    # 添加数据点
    geo.add("%", os_values, type_=ChartType.EFFECT_SCATTER)
    # 添加流向,type_设置为LINES,涟漪配置为箭头,提供的标记类型包括 'circle', 'rect', 'roundRect', 'triangle',
    # 'diamond', 'pin', 'arrow', 'none'
    geo.add("迁出城市",
            od_list,
            type_=ChartType.LINES,
            effect_opts=opts.EffectOpts(symbol=SymbolType.ARROW,
                                        symbol_size=5,
                                        color="yellow"),
            linestyle_opts=opts.LineStyleOpts(curve=0.2),
            is_large=True)
    # 不显示标签
    geo.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
    # 设置图标标题,visualmap_opts=opts.VisualMapOpts()为左下角的视觉映射配置项
    geo.set_global_opts(visualmap_opts=opts.VisualMapOpts(),
                        title_opts=opts.TitleOpts(title="广西地市迁徙数据"))
    # 直接在notebook里显示图表
    geo.render_notebook()
    # 生成html文件,可传入位置参数
    geo.render(f".\\out_od\\广西-2020.10.{date_number}迁出OD图.html")
Exemplo n.º 5
0
def drawGeoMap(excel_path, mtype='china'):
    data = xlrd.open_workbook(excel_path)
    table = data.sheet_by_index(0)
    nrow = table.nrows
    dates = table.row_values(0)
    # print(dates)
    allData = {}
    for i in range(1, nrow):
        aNameData = {}
        sname = f"{table.cell(i,0).value} {table.cell(i,1).value}"
        for j in range(2, len(dates)):
            value = table.cell(i,j).value
            try:
                value = json.loads(value)
                value = value[1:4]
            except Exception as e:
                print(f"error: {e}")
                pass
            aNameData[dates[j]] = value
        allData[sname] = aNameData

    # print(f'学生数:{len(allData)}')

    title = '2021年1月21日能仔位置'
    geo = Geo(init_opts=opts.InitOpts(width='1000px', height='580px', page_title=title, theme=ThemeType.LIGHT))

    geo.add_schema(maptype=mtype)

    for name, data in allData.items():
        for date, location in data.items():
            aNameLocation = []
            try:
                longitude, latitude, address = location
            except Exception as e:
                print(f"Error: {e}")
                longitude, latitude, address = DEFAULT_Location
            # aNameLocation.append(('%s %s\n' % (name, date), address))
            # geo.add_coordinate('%s %s' % (name, date), longitude, latitude)
            sno, sname = name.split(' ')
            # print(sno, sname)
            aNameLocation.append(('%s %s' % (sno, sname), date))
            geo.add_coordinate('%s %s' % (sno, sname), longitude, latitude)
            geo.add(name, aNameLocation, type_=ChartType.EFFECT_SCATTER)

    geo.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
    geo.set_global_opts(legend_opts=opts.LegendOpts(type_='scroll', orient='vertical', pos_left='left', pos_top='10%', is_show=False), title_opts=opts.TitleOpts(title=title))

    map_path = os.path.join(dir_path, '2021年1月21日能仔位置地图.html')
    geo.render(map_path)

    # os.system(f'"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" {os.path.abspath(map_path)}')

    print('done.')
Exemplo n.º 6
0
def draw_map(data_pair, data_coordinate) -> Geo:   # ->常常出现在python函数定义的函数名后面,为函数添加元数据,描述函数的返回类型,从而方便开发人员使用。
    g = Geo()
    # 选择要显示的地图
    g.add_schema(maptype="重庆", center=[106.531638,29.561081], itemstyle_opts=opts.ItemStyleOpts(color="#575D57"))
    # 使用add_coordinate(name, lng, lat)添加坐标点和坐标名称
    for item in data_coordinate:
        g.add_coordinate(item['name'], item['lng'], item['lat'])
    # 将数据添加到定义的地图上
    g.add('', data_pair, type_=GeoType.EFFECT_SCATTER, symbol_size=5)                         # type_=ChartType.HEATMAP
    # 设置样式
    g.set_series_opts(label_opts=opts.LabelOpts(is_show=False))\
                                     .set_global_opts(visualmap_opts=opts.VisualMapOpts(min_=60, max_ = 200, is_piecewise=True),title_opts=opts.TitleOpts(title="重庆房源分布图"))
    return g
Exemplo n.º 7
0
def base_info():
    print(data)
    geo = Geo()
    geo.add_schema(maptype="china")  # 加入自定义的点,格式为
    # geo.add_coordinate("自定义点", 80.39770014211535,39.90779994986951)
    # 地图形式 type_=ChartType.HEATMAP
    geo.add("geo", data, type_=ChartType.EFFECT_SCATTER)
    # is_show:是否显示经纬度
    geo.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
    geo.set_global_opts(visualmap_opts=opts.VisualMapOpts(),
                        title_opts=opts.TitleOpts(title="Geo-基本示例"))

    return geo
Exemplo n.º 8
0
def insert_loc():
    g = Geo()
    data_pair = []
    g.add_schema(maptype='china')
    airport_df = pd.read_excel('CN_airport_info.xlsx', usecols='B,D,E,F,S')
    for i in range(len(airport_df)):
        g.add_coordinate(airport_df.iloc[i, 1], float(airport_df.iloc[i, 3]),
                         float(airport_df.iloc[i, 2]))
        data_pair.append((airport_df.iloc[i, 1], int(airport_df.iloc[i, 4])))
    g.add('', data_pair, type_=GeoType.EFFECT_SCATTER, symbol_size=7)
    g.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
    g.set_global_opts(
        visualmap_opts=opts.VisualMapOpts(is_piecewise=False),
        title_opts=opts.TitleOpts(title="全国机场分布图"),
    )
    return g
Exemplo n.º 9
0
def base_info():
    geo = Geo()
    geo.width = "1440px"
    geo.height = "680px"
    geo.add_schema(maptype="china")
    geo.add("确诊人数", confirmed, type_=ChartType.EFFECT_SCATTER)
    geo.add("疑似人数", suspect, type_=ChartType.EFFECT_SCATTER)
    geo.add("死亡人数", dead, type_=ChartType.EFFECT_SCATTER)
    geo.add("治愈人数", healed, type_=ChartType.EFFECT_SCATTER)
    geo.set_series_opts(
        label_opts=opts.LabelOpts(is_show=False, background_color='#61a0a8'))
    geo.set_global_opts(visualmap_opts=opts.VisualMapOpts(),
                        title_opts=opts.TitleOpts(
                            title="中国ncov-2019疫情动态\n上一次数据更新时间:\n" + time))

    return geo
Exemplo n.º 10
0
def geo_base():
    city_data = get_data()
    print(city_data)
    geo = Geo(init_opts=opts.InitOpts(theme="vintage"))
    for city in city_data:
        try:
            geo.add_schema(maptype="china",
                           itemstyle_opts=opts.ItemStyleOpts(color="gray"))
            geo.add("微信好友分布地图", [city], type_="effectScatter", symbol_size=10)
            geo.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
            geo.set_global_opts(
                visualmap_opts=opts.VisualMapOpts(),
                title_opts=opts.TitleOpts(title="来自中南海的瓶子"),
            )
        except Exception as e:
            print(city)
            pass

    geo.render("ms_geo.html")
Exemplo n.º 11
0
def draw_with_echarts_scatter():
    '''使用pyecharts画散点图'''
    try:
        device_csv_dir = r'E:/test_opencv/车辆经常停留位置/all_device_data_csv/'
        pyecharts_device_html_dir = r'E:/test_opencv/车辆经常停留位置/pyecharts_device_html/'
        if not os.path.exists(device_csv_dir):
            os.makedirs(device_csv_dir)
        if not os.path.exists(pyecharts_device_html_dir):
            os.makedirs(pyecharts_device_html_dir)
        for item in os.listdir(device_csv_dir):
            csvlName = device_csv_dir + item
            df = pd.read_csv(csvlName, encoding='utf-8', low_memory=False)
            # X = df.drop_duplicates(subset=['longitude', 'latitude'])
            X = df
            device_id = X['device_id'].iloc[0]  # 取组内第一个device_id用于存csv用
            staff_id = X['staff_id'].iloc[0]  # 取组内第一个staff_id用于存csv用
            staff_name = X['staff_name'].iloc[0]  # 取组内第一个staff_name用于存csv用
            car_id = X['car_id'].iloc[0]  # 取组内第一个car_id用于存csv用
            car_num = X['car_num'].iloc[0]  # 取组内第一个car_num用于存csv用
            create_time_1 = X['create_time_1'].iloc[0]  # 取组内第一个create_time_1用于存csv用
            g = Geo()
            g.add_schema(maptype="china")
            # 给所有点附上标签 'create_time'
            for index, row in X.iterrows():
                g.add_coordinate(row['create_time'], row['remain_longitude'], row['remain_latitude'])
            create_time = X.create_time.values.tolist()
            # 给每个点的值赋为 1
            data_list = [[item, 1] for item in create_time]
            # 画图
            # g.add('', data_list, type_=GeoType.HEATMAP, symbol_size=2)
            g.add('', data_list, type_=GeoType.EFFECT_SCATTER, symbol_size=2)
            g.set_series_opts(label_opts=options.LabelOpts(is_show=False))
            #heatmap
            # g.set_global_opts(visualmap_opts=options.VisualMapOpts(), title_opts=options.TitleOpts(title=staff_name+"_" + str(car_num) + '_' + str(create_time_1) +'_heatmap'  ,pos_left='50%',pos_top='20'))
            #scatter
            g.set_global_opts(title_opts=options.TitleOpts(title=staff_name+"_" + str(car_num) + '_' + str(create_time_1) +'_scatter'  ,pos_left='50%',pos_top='20'))
            # 保存结果到 html
            result = g.render(pyecharts_device_html_dir +  str(staff_name) + '_' +str(car_num) + '_' + str(create_time_1) + '.html')

    except Exception as ex:
        logger.error("Call method draw_with_echarts_scatter() error!")
        logger.error("Exception:" + str(ex))
        raise ex
Exemplo n.º 12
0
def geo_heatmap(k, v) -> Geo:
    try:
        c = Geo()
        c.add_schema(maptype="china")
        c.add(
            "ratio",
            [list(z) for z in zip(k, v)],
            type_=ChartType.HEATMAP,
        )
    except TypeError:
        print("地址有误,开始排错......")
        with open("place.txt", mode="a") as f:
            i = 0
            c = Geo()
            c.add_schema(maptype="china")
            while i < len(k):
                try:
                    c.add(
                        "ratio",
                        [list(z) for z in zip(k[:i], v[:i])],
                        type_=ChartType.HEATMAP,
                    )
                except:
                    print(k[i - 1])
                    f.writelines(k[i - 1])
                    f.writelines('\n')
                    del k[i - 1]
                    del v[i - 1]
                    i -= 1
                    continue
                else:
                    i += 1
        geo_heatmap(k, v)
    else:
        c.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
        timen = datetime.datetime.now().strftime('%Y-%m-%d')
        timea = datetime.datetime.now().strftime('%Y-%m-%d %H.%M.%S')
        c.set_global_opts(
            visualmap_opts=opts.VisualMapOpts(),
            title_opts=opts.TitleOpts(title="2019nCoV{} BY PZW".format(timen)))

        Geo.render(c, path='{}HEATMAP.html'.format(timea))
        print('渲染完毕')
Exemplo n.º 13
0
 def get_company_city(self):
     sql = """
      select city,count(distinct url) as company_count from lagou_company GROUP BY city 
      """
     result = cursor.execute(sql)
     key = []
     values = []
     for info in cursor.fetchall():
         if info[0] != '海外' and re.match('[\u4e00-\u9fa5]', info[0]):
             key.append(info[0])
             values.append(info[1])
     geo = Geo(init_opts=opts.InitOpts(width="1600px", height="1000px"))
     geo.add_schema(maptype="china")
     geo.add("公司分布", [list(z) for z in zip(key, values)], type_="heatmap")
     geo.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
     geo.set_global_opts(visualmap_opts=opts.VisualMapOpts(),
                         title_opts=opts.TitleOpts(title="各城市公司分布"))
     file = data_store + "\\" + "company.html"
     check_path(file)
     geo.render(file)
Exemplo n.º 14
0
def plot():
    # 初始化图表信息
    geo = Geo(init_opts=opts.InitOpts(width="96vw",
                                      height="96vh",
                                      page_title="教育网拓扑图",
                                      animation_opts=opts.AnimationOpts(
                                          animation=False)))

    # 添加地图
    geo.add_schema(maptype="china")

    # 添加所有点的地理信息
    geo.add_coordinate_json("./data/data.json")

    # 画中间节点
    geo.add("Route", [(i, "Route") for i in Nodes_Route],
            color="Red",
            point_size=4,
            symbol_size=4,
            effect_opts=opts.EffectOpts(is_show=False))

    # 画目的节点
    geo.add("Dst", [(i, "Dst") for i in Nodes_Dst],
            color="SeaGreen",
            point_size=4,
            symbol_size=4,
            effect_opts=opts.EffectOpts(is_show=False))

    # 画线 展示拓扑信息
    geo.add("",
            list(Trace),
            type_=ChartType.LINES,
            effect_opts=opts.EffectOpts(is_show=False, symbol_size=2),
            linestyle_opts=opts.LineStyleOpts(curve=0.1))

    geo.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
    geo.set_global_opts(title_opts=opts.TitleOpts(title="教育网拓扑图"))

    # 生成图表到指定文件
    geo.render("./dist/render.html")
Exemplo n.º 15
0
 def get_geo_base(self, _data):
     '''
     plot geo-HeatMap
     :param _data: gps对应的城市分布(dataframe)
     :return: geo城市分布图
     '''
     register_url(self.echarts_url)
     geo = Geo(init_opts=opts.InitOpts(width="1000px",
                                       height="600px",
                                       page_title=self.country,
                                       bg_color=''))
     geo.add_schema(maptype=self.country)
     for _city, _gps in self.geo_dict.items():
         geo.add_coordinate(name=_city, longitude=_gps[0], latitude=_gps[1])
     geo.add(series_name=self.series_name,
             data_pair=_data,
             type_=ChartType.HEATMAP)
     geo.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
     geo.set_global_opts(
         visualmap_opts=opts.VisualMapOpts(max_=self.threshold_plot),
         title_opts=opts.TitleOpts(title="Geo-HeatMap"))
     return geo
Exemplo n.º 16
0
    def country_job_num(self):
        df = pd.read_csv(
            "D:\PythonFile\LagouSpider\imags\CsvFile\LagouPosition.csv")
        citys = df.city
        count = Counter(citys)
        # count = count.most_common(len(count))
        city_list = []
        for city in count:
            city_list.append([city, count[city]])

        map = Geo()
        map.add_schema("china")
        map.add("geo", city_list, type_=ChartType.EFFECT_SCATTER)
        map.set_series_opts(label_opts=opt.LabelOpts(is_show=False))

        map.set_global_opts(
            visualmap_opts=opt.VisualMapOpts(),
            title_opts=opt.TitleOpts(title="Python开发工程师分布情况"),
        )

        map.render(
            path="D:\PythonFile\LagouSpider\imags\pic/Python开发工程师分布情况.html")
Exemplo n.º 17
0
def plot_geo_heatmap(all_df):
    """画热力图

    Args:
        all_df (dataframe): 每日数据图
    """
    def valid_area(x, v):
        if x.get_coordinate(v) is not None:
            return 'Y'
        else:
            return 'N'

    c = Geo(init_opts=opts.InitOpts(width='800px', height='600px'))

    all_df['valid'] = all_df['name'].apply(lambda x: valid_area(c, x))
    all_df['plot_v'] = np.log2(all_df['confirm_all'] / 50 + 1) * 10

    c.add_schema(maptype="china")
    c.add(
        "ratio",
        all_df.loc[all_df['valid'] == 'Y', ['name', 'plot_v']].values,
        type_=ChartType.HEATMAP,
    )

    c.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
    c.set_global_opts(
        visualmap_opts=opts.VisualMapOpts(),
        legend_opts=opts.LegendOpts(is_show=False),
        title_opts=opts.TitleOpts(
            pos_left='center',
            title='2020 Novel coronavirus pneumonia (NCP) ',
            title_link=
            'https://news.qq.com/zt2020/page/feiyan.htm?from=timeline&isappinstalled=0'
        ))

    # map_p = Map()
    # map_p.set_global_opts(title_opts=opts.TitleOpts(title="实时疫情图"), visualmap_opts=opts.VisualMapOpts(max_=100))
    # map_p.add("确诊", data, maptype="china")
    Geo.render(c, path='E:/HEATMAP.html')
Exemplo n.º 18
0
def in_data(city, date_number):
    workbook = xlrd.open_workbook(f'.\\{path}\\{city}-迁入来源地规模指数.xlsx')
    sheet = workbook.sheet_by_index(0)
    city_od_list = []
    city_od_values = []
    a = 0
    cols = sheet.col_values(1)[1:]
    cols_date = sheet.col_values(date_number + 1)[1:]
    for j in cols:
        city_od = (j, city)
        city_od_v = (j, cols_date[a])
        city_od_list.append(city_od)
        city_od_values.append(city_od_v)
        a += 1
    geo = Geo()
    # 地图类型,世界地图可换为world
    geo.add_schema(maptype="广西")
    # 添加数据点
    geo.add("%", city_od_values, type_=ChartType.EFFECT_SCATTER)
    # 添加流向,type_设置为LINES,涟漪配置为箭头,提供的标记类型包括 'circle', 'rect', 'roundRect', 'triangle',
    # 'diamond', 'pin', 'arrow', 'none'
    geo.add("迁入城市",
            city_od_list,
            type_=ChartType.LINES,
            effect_opts=opts.EffectOpts(symbol=SymbolType.ARROW,
                                        symbol_size=5,
                                        color="yellow"),
            linestyle_opts=opts.LineStyleOpts(curve=0.2),
            is_large=True)
    # 不显示标签
    geo.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
    # 设置图标标题,visualmap_opts=opts.VisualMapOpts()为左下角的视觉映射配置项
    geo.set_global_opts(visualmap_opts=opts.VisualMapOpts(),
                        title_opts=opts.TitleOpts(title=f"{city}迁入数据"))
    # 直接在notebook里显示图表
    geo.render_notebook()
    # 生成html文件,可传入位置参数
    geo.render(f".\\in_od\\{city}-2020.10.{date_number}迁入OD图.html")
Exemplo n.º 19
0
def generate_geo_png(geodata, geomax, geomin, geotitle, display_id,
                     map_data_title):
    from pyecharts import options as opts
    from pyecharts.charts import Map, Geo
    from pyecharts.render import make_snapshot
    # from pyecharts_snapshot.main import make_a_snapshot
    from snapshot_selenium import snapshot
    geo = Geo()
    geo.add_coordinate_json(
        '/home/CitizenScience/backend/backend/geoCoordJson.js')
    geo.add_schema(maptype="china")
    print(geodata)
    print(map_data_title)
    geo.add(" ", geodata, symbol_size=10)
    geo.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
    geo.set_global_opts(
        visualmap_opts=opts.VisualMapOpts(max_=geomax, min_=geomin))
    figure_url = "/home/CitizenScience/file/visualization/" + str(
        display_id) + '_geo.png'
    # figure_url = str(display_id) + '_geo.png'
    make_snapshot(snapshot, geo.render(), figure_url, 2)
    # geo.render(path='render.html')
    # cmd = "snapshot render.html png"
    # try:
    #    isRun = os.system(cmd)
    #    print("截图完成")
    # except:
    #    print("截图失败")
    # cmd = "mv output.png ../file/visualization/{}".format(figure_url)
    # try:
    #     isRun = os.system(cmd)
    #    print("移动完成")
    # except:
    #     print("移动失败")

    # make_a_snapshot('geo2.html', 'geo3.png')
    return figure_url
Exemplo n.º 20
0
             ("黄埔",1),
             ("秦皇岛",1),
             ("南通",1),
             ("杭州",1),
             ("上海",1),
             ("香港",1),
             ("澳门",1),
             ("深圳",1),
             ("汕头",1),
             ("烟台",1),
             ("威海",1),
             ("芜湖",1),
             ("南京",1),
             ("温州",1),
             ("嘉兴",1),
            ],type_=ChartType.EFFECT_SCATTER,color="gold")
c.add("机场",
        [("北京",6),
        ("呼和浩特",4),
         ("南昌",4),
         ("贵州",4),
         ("成都",4),
         ("哈尔滨",2),
         ("乌鲁木齐",1),
         ("郑州",1),
         ("沈阳",2),
         ("长春",1),
        ],type_=ChartType.EFFECT_SCATTER,color="deepskyblue")
c.set_series_opts(label_opts=opts.LabelOpts(is_show=False)).set_global_opts(title_opts=opts.TitleOpts(title="港口机场分布图"))
c.render_notebook()
Exemplo n.º 21
0
def city_distribution(df):
    df['city'] = df.city.replace(re.compile(r'[a-zA-Z]+'), '国外')

    # 筛选国外城市
    df_city1 = []
    for i in df['city']:
        i = str(i)
        if '国外' in i:
            df_city1.append('国外')
        else:
            df_city1.append(i)
    df['city'] = df_city1

    # 提取城市名
    df_city2 = []
    for i in df['city']:
        i = str(i)
        # 处理形如 县级市,地级市 数据
        if ',' in i:
            i = i.split(',')[1].strip()
        elif len(i) == 4:
            i = i[2:]
        elif len(i) > 4:
            if '中国台湾' in i:
                i = i[4:]
            elif '内蒙古' in i or '黑龙江' in i:
                i = i[3:]
            else:
                i = i[2:]
        df_city2.append(i)
    df['city'] = df_city2

    # 筛选出国内城市Top10
    city_top = df.city.value_counts()
    if '国外' in city_top.index:
        city_top.drop('国外', inplace=True)
    if '未知' in city_top.index:
        city_top.drop('未知', inplace=True)
    if city_top.count() > 10:
        city_top = city_top[:10]
    print('Top10 cities:')
    print(city_top)

    # 绘制条形图
    bar = Bar(init_opts=opts.InitOpts(width='1350px', height='750px'))
    bar.add_xaxis(city_top.index.tolist())
    bar.add_yaxis('评论人次', city_top.values.tolist())
    bar.set_global_opts(title_opts=opts.TitleOpts(title='评论者Top10城市分布'),
                        toolbox_opts=opts.ToolboxOpts())

    # 绘制Top30城市分布地理图(国内)
    city_num = df.city.value_counts()
    if '国外' in city_num.index:
        city_num.drop('国外', inplace=True)
    if '未知' in city_num.index:
        city_num.drop('未知', inplace=True)
    if city_num.count() > 30:
        city_num = city_num[:30]
    print('Top30 cities:')
    print(city_num)

    geo = Geo(init_opts=opts.InitOpts(width='1350px', height='750px'))
    geo.add_schema(maptype='china')
    geo.add(
        '',
        [list(z) for z in zip(city_num.index, city_num.values.astype('str'))],
        type_=GeoType.EFFECT_SCATTER)
    geo.set_global_opts(visualmap_opts=opts.VisualMapOpts(),
                        title_opts=opts.TitleOpts(title='评论者城市分布'),
                        toolbox_opts=opts.ToolboxOpts())
    geo.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
    return bar, geo
Exemplo n.º 22
0
                "color": "cyan"
            }, {
                "value": "7",
                "label": "G",
                "color": "purple"
            }
        ],
    ),
    legend_opts=opts.LegendOpts(  # 设置图例配置项
        pos_right="right",
        pos_top="top",
        orient="vertical",
    ),
)
geo.set_series_opts(label_opts=opts.LabelOpts(  # 设置标签配置项
    is_show=False  # 设置不显示Label
))

geo.render("demo03.html")  # 生成名为"demo03"的本地html文件

# customMap = (
#     Map()
#         .add("商家A",  # 图例
#              [list(z) for z in zip(Faker.provinces, Faker.values())],  # 数据项
#              "china"  # 地图
#              )
#         .set_global_opts(  # 设置全局项
#         title_opts=opts.TitleOpts(  # 设置标题项
#             title="中国地图"  # 设置标题名称
#         )
#     )
Exemplo n.º 23
0
def test_geo():
    city = '长沙'
    g = Geo()
    g.add_schema(maptype='河南')

    # 定义坐标对应的名称,添加到坐标库中 add_coordinate(name, lng, lat)
    # g.add_coordinate('湖南省长沙市宁乡市横市镇藕塘', 112.21369756169062, 28.211359706637378)
    # g.add_coordinate('湖南省长沙市雨花区跳马镇仙峰岭', 113.16921879037058, 28.039877432448428)
    # g.add_coordinate('湖南省长沙市长沙县黄花镇新塘铺长沙黄花国际机场', 113.23212337884058, 28.19327497825815)

    # 定义数据对,
    # data_pair = [('湖南省长沙市雨花区跳马镇仙峰岭', 10), ('湖南省长沙市宁乡市横市镇藕塘', 5), ('湖南省长沙市长沙县黄花镇新塘铺长沙黄花国际机场', 20)]
    data_pair = list(temp_d.items())
    # Geo 图类型,有 scatter, effectScatter, heatmap, lines 4 种,建议使用
    # from pyecharts.globals import GeoType
    # GeoType.GeoType.EFFECT_SCATTER,GeoType.HEATMAP,GeoType.LINES

    # 将数据添加到地图上
    g.add('', data_pair, type_=GeoType.EFFECT_SCATTER, symbol_size=15)
    # 设置样式

    g.set_series_opts(label_opts=opts.LabelOpts(is_show=False))

    # 自定义分段 color 可以用取色器取色
    # pieces = [
    #     {'max': 1, 'label': '0以下', 'color': '#50A3BA'},
    #     {'min': 1, 'max': 10, 'label': '1-10', 'color': '#3700A4'},
    #     {'min': 10, 'max': 20, 'label': '10-20', 'color': '#81AE9F'},
    #     {'min': 20, 'max': 30, 'label': '20-30', 'color': '#E2C568'},
    #     {'min': 30, 'max': 50, 'label': '30-50', 'color': '#FCF84D'},
    #     {'min': 50, 'max': 100, 'label': '50-100', 'color': '#DD0200'},
    #     {'min': 100, 'max': 200, 'label': '100-200', 'color': '#DD675E'},
    #     {'min': 200, 'label': '200以上', 'color': '#D94E5D'}  # 有下限无上限
    # ]

    pieces = [
        {
            'min': 0,
            'max': 3,
            'label': '类别1',
            'color': '#50A3BA'
        },  #有上限无下限,label和color自定义
        {
            'min': 4,
            'max': 6,
            'label': '类别2',
            'color': '#81AE9F'
        },
        {
            'min': 7,
            'max': 8,
            'label': '类别3',
            'color': '#E2C568'
        },
        #   {'min': 150, 'max': 300,'label': '150-300','color':'#FCF84D'},
        #   {'min': 300, 'label': '300以上','color':'#D94E5D'}#有下限无上限
    ]

    #  is_piecewise 是否自定义分段, 变为true 才能生效

    g.set_global_opts(
        visualmap_opts=opts.VisualMapOpts(is_piecewise=True, pieces=pieces),
        title_opts=opts.TitleOpts(title="城市聚类"),
    )

    return g
Exemplo n.º 24
0
data = pd.read_excel("D:\数有引力\魔都商圈\办公项目.xlsx")  # 读取数据
geo_sight_coord = {
    data['项目名称'][i].strip(): [data['经度'][i], data['纬度'][i]]
    for i in range(len(data))
}  # 构造位置字典数据
data_pair = [(data['项目名称'][i].strip(), data['日租金'][i])
             for i in range(len(data))]  # 构造项目租金数据

g = Geo()  # 地理初始化
g.add_schema(maptype="上海")  # 限定上海市范围
for key, value in geo_sight_coord.items():  # 对地理点循环
    g.add_coordinate(key, value[0], value[1])  # 追加点位置

g.add("", data_pair, symbol_size=2)  # 追加项目名称和租金
g.set_series_opts(label_opts=opts.LabelOpts(is_show=False),
                  type='scatter')  # 星散点图scatter

pieces = [
    {
        'max': 3,
        'label': '<3',
        'color': '#00B2EE'
    },
    {
        'min': 3,
        'max': 6,
        '3~6': 'love',
        'color': '#71C671'
    },
    {
        'min': 6,
avg_salary_by_loc = salary_data.groupby(loc_data).mean() \
    .sort_values(ascending=False)
avg_salary_by_loc.plot.bar()
for i, v in enumerate(avg_salary_by_loc):
    plt.text(i, v, round(v, 2), ha='center', va='bottom')
plt.title('不同区域平均工资柱状图', fontproperties=font_zh)
plt.xticks(range(len(avg_salary_by_loc)),
           avg_salary_by_loc.index,
           fontproperties=font_zh)
plt.xlabel('区域', fontproperties=font_zh)
plt.ylabel('平均工资(千/年)', fontproperties=font_zh)

loc_list = [[i, loc_counts[i]] for i in loc_counts.index]
geo = Geo().add_schema(maptype='成都')
geo.add('区域分布热度图', loc_list, type_=ChartType.HEATMAP)  # 设置名称和数据
geo.set_series_opts(label_opts=opts.LabelOpts(is_show=True))  # 设置标签是否可见
geo.set_global_opts(visualmap_opts=opts.VisualMapOpts())  # 视觉映射配置
geo.render('./loc_heatmap.html')  # 保存为网页
os.system('"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"\
 ./loc_heatmap.html')  # 打开网页

# 工作经验分析
exp_data = data['job_exp']
exp_des = exp_data.describe()  # 工作经验基本数据描述,包括平均数、中位数等
exp_counts = exp_data.value_counts().sort_index()  # 按实际值进行频率统计

fig = plt.figure('平均工作经验统计详情', figsize=[16, 5])
plt.subplots_adjust(left=0.03, bottom=0.15, right=0.97, top=0.9, wspace=0.25)

ax1 = fig.add_subplot(161)
plt.title('平均工作经验年限详情描述', fontproperties=font_zh)
Exemplo n.º 26
0
city2 = sheet.col_values(8)#降落城市
speed = sheet.col_values(22)#飞机速度
vspeed = sheet.col_values(23)#垂直速度
height = sheet.col_values(24)#飞行高度
uptime = sheet.col_values(26)#时间


c = Geo()
# 加载图表模型中的中国地图
c.add_schema(maptype="china")

i = 1
for i in range(1,10):
    c.add_coordinate("航班号" + flightnumber_list[i], long_list[i], lat_list[i])
    # 为自定义的点添加属性
    c.add("geo", [("航班号" + flightnumber_list[i], "航空公司:"+aircname[i]+"  "+city1[i]+"飞往"+city2[i]+"  飞行速度:"+str(speed[i])+"  垂直速度:"+str(vspeed[i])+"  高度:"+str(height[i])+"  时间"+uptime[i])])
    # 设置坐标属性

c.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
# 设置全局属性
c.set_global_opts(
    visualmap_opts=opts.VisualMapOpts(),
    title_opts=opts.TitleOpts(title="航班信息可视化"),
)


# 在 html(浏览器) 中渲染图表
c.render()
# 在 Jupyter Notebook 中渲染图表
c.render_notebook()
Exemplo n.º 27
0
            addr_dic[provice] = 0
        addr_dic[provice] += 1

# print(addr_dic)

# print(addr_dic.items())
sort_addr = sorted(addr_dic.items(), key=lambda item: item[1],
                   reverse=True)[0:10]
print(sort_addr)

# addr_names = [item[0] for item in sort_addr]
# addr_counts = [item[1] for item in sort_addr]
# print(addr_names, addr_counts)

from pyecharts.charts import Geo
from pyecharts.options import LabelOpts, VisualMapOpts, TitleOpts
from pyecharts.globals import ChartType

geo = Geo()

geo.add_schema(maptype="china")

geo.add("地点统计", sort_addr, type_=ChartType.EFFECT_SCATTER)
geo.set_series_opts(label_opts=LabelOpts(is_show=False))
geo.set_global_opts(
    visualmap_opts=VisualMapOpts(is_piecewise=True, max_=sort_addr[0][1]),
    title_opts=TitleOpts(title="撩课Python统计"),
)

geo.render("地点统计-geo图.html")
Exemplo n.º 28
0
def geo():
    place_avaliable = passenger_spider(None, all=True)
    place_no_weather = passenger_spider_no_weather()
    city = '上海'
    g = Geo(init_opts=opts.InitOpts(
        width="100%", height="100%", bg_color="#12406d"))
    g.add_schema(maptype=city,
                 itemstyle_opts=opts.ItemStyleOpts(color="#135dbe",
                                                   border_color="#fff"),
                 zoom=1.2)
    # 定义坐标对应的名称,添加到坐标库中 add_coordinate(name, lng, lat)
    for k, v in jingwei_dict.items():
        g.add_coordinate(k, float(v[1]), float(v[0]))
    for item in place_no_weather:
        g.add_coordinate(item["NAME"], float(item["LOCATION_X"]),
                         float(item["LOCATION_Y"]))

    coordinates = []
    for k in jingwei_dict.keys():
        data_pairs = []
        data_pairs.append(k)
        for p in place_avaliable:
            if k == p["NAME"]:
                if not p.get("MAX_NUM"):
                    data_pairs.append(0.0)
                else:
                    data_pairs.append(
                        round(int(p["NUM"]) / int(p["MAX_NUM"]), 2))
                break
        if len(data_pairs) == 1:
            data_pairs.append(0.0)
        data_pairs = tuple(data_pairs)
        coordinates.append(data_pairs)

    for item in place_no_weather:
        data_pairs = []
        data_pairs.append(item["NAME"])
        if (not item["MAX_NUM"]) or (item["MAX_NUM"] == ""):
            data_pairs.append(0)
        else:
            data_pairs.append(round(
                int(item["NUM"]) / int(item["MAX_NUM"]), 2))
        data_pairs = tuple(data_pairs)
        coordinates.append(data_pairs)

    # 定义数据对,
    # data_pair = [
    #     ('湖南省长沙市雨花区跳马镇仙峰岭', 25),
    #     ('湖南省长沙市宁乡市横市镇藕塘', 5),
    #     ('湖南省长沙市长沙县黄花镇新塘铺长沙黄花国际机场', 20)
    # ]
    data_pair = coordinates
    # Geo 图类型,有 scatter, effectScatter, heatmap, lines 4 种,建议使用
    # from pyecharts.globals import GeoType
    # GeoType.GeoType.EFFECT_SCATTER,GeoType.HEATMAP,GeoType.LINES

    # 将数据添加到地图上
    g.add('', data_pair, type_=ChartType.EFFECT_SCATTER)
    # 设置样式
    g.set_series_opts(
        label_opts=opts.LabelOpts(is_show=False, formatter="{b}:{c}"))
    # 自定义分段 color 可以用取色器取色
    pieces = [
        {
            'max': 0.1,
            'label': '10%以下',
            'color': '#98F5FF'
        },
        {
            'min': 0.1,
            'max': 0.3,
            'label': '10%-30%',
            'color': '#0f0'
        },
        {
            'min': 0.3,
            'max': 0.5,
            'label': '30%-50%',
            'color': 'orange'
        },
        {
            'min': 0.5,
            'max': 0.7,
            'label': '50%-70%',
            'color': '#E2C568'
        },
        {
            'min': 0.7,
            'max': 0.8,
            'label': '70%-80%',
            'color': '#FCF84D'
        },
        {
            'min': 0.8,
            'max': 0.9,
            'label': '80%-90%',
            'color': '#3700A4'
        },
        {
            'min': 0.9,
            'max': 1,
            'label': '90%-100%',
            'color': '#DD675E'
        },
        {
            'min': 1,
            'label': '100%以上',
            'color': '#f00'
        }  # 有下限无上限
    ]
    #  is_piecewise 是否自定义分段, 变为true 才能生效
    g.set_global_opts(
        visualmap_opts=opts.VisualMapOpts(is_piecewise=True,
                                          pieces=pieces,
                                          textstyle_opts=opts.TextStyleOpts(
                                              color="#fff")))
    return g
Exemplo n.º 29
0
    ("深圳", 1),
    ("汕头", 1),
    ("烟台", 1),
    ("威海", 1),
    ("芜湖", 1),
    ("南京", 1),
    ("温州", 1),
    ("嘉兴", 1),
],
      type_=ChartType.EFFECT_SCATTER)
c.add(
    "机场",
    [
        ("北京", 6),
        ("呼和浩特", 4),
        ("南昌", 4),
        ("贵州", 4),
        ("成都", 4),
        ("哈尔滨", 2),
        ("乌鲁木齐", 1),
        ("郑州", 1),
        ("沈阳", 2),
        ("长春", 1),
    ],
    type_=ChartType.EFFECT_SCATTER,
)
c.set_series_opts(label_opts=opts.LabelOpts(is_show=False)).set_global_opts(
    title_opts=opts.TitleOpts(title="港口机场分布图"),
    visualmap_opts=opts.VisualMapOpts(max_=30))
c.render_notebook()
Exemplo n.º 30
0
    def _cluster(self,
                 up_2,
                 class_upper,
                 plot_matplotlib=False,
                 plot_echarts=False) -> (list, list, list):
        '''对某个部分进行聚类
        class_upper:
            表示是否是在所有点的 y 均值之上的点
            key: city_index  value: 0 or 1

        :return 聚好的2类城市的列表 class_0, class_1 另一边的城市列表 (都是不包含起始点的)
        '''
        if up_2:
            # 找出上面的点进行聚类
            cities = [key for key, value in class_upper.items() if value == 1]
        else:
            cities = [key for key, value in class_upper.items() if value == 0]

        try:
            cities.remove(self.city_start)  # 去除起始点
        except:
            pass

        # todo 将与此部分的点没有联通,但是与另一部分的点有联通的归为另一边(这些点会影响聚类结果,并且不符合业务)
        should_cluster = deepcopy(self.init_data)  # 新的要聚两类中的点组成的无向图
        should_not_cluster = dict()
        other_cities = []  # 另一边的城市

        # 分开两边的点
        for k, v in class_upper.items():
            if k not in cities:
                other_cities.append(k)
                should_cluster.pop(k)
                should_not_cluster[k] = v

        # 如果一个点的!!所有子结点!!都不在这一部分里,在无向图中删除,并放到另一边
        for k, v in list(should_cluster.items()):
            not_in_sum = 0
            for next_node in v:
                if next_node not in cities:
                    not_in_sum += 1

            if not_in_sum == len(v):
                other_cities.append(k)
                cities.remove(k)
                should_cluster.pop(k)
                should_not_cluster[k] = v

        arr = []

        # 构建二维的数据矩阵
        for c in cities:
            arr.append([*self.map_dict[c]])
        data = pd.DataFrame(arr)

        n_cluster = 2
        # km = DBSCAN(eps=1.2, min_samples=3).fit(data)
        km = KMeans(n_clusters=n_cluster, random_state=6).fit(data)
        y_pred_ = km.labels_  # 类别预测

        print(cities)
        print(y_pred_)
        print(other_cities)

        centroid = km.cluster_centers_  # 聚类中心
        # city_class = {i:y_pred_[j] for i, j in zip(data.index, range(0, len(cities)))}

        # todo 将与自己的类里面无联通,但是与另一个类的点有联通的归为那一类
        class_1 = [cities[index] for index, j in enumerate(y_pred_) if j == 1]
        class_0 = [cities[index] for index, j in enumerate(y_pred_) if j == 0]

        for c in cities:
            _sum = 0
            out_sum = 0
            if c in class_0:
                c_mark = 0  # c_mark 当前点的类别
            else:
                c_mark = 1
            c_list = should_cluster[c]  # 单点点对应的子结点列表
            for node in c_list:
                if node not in cities:
                    out_sum += 1
                    continue
                node_mark = 0 if node in class_0 else 1
                if c_mark != node_mark:
                    _sum += 1
            if len(c_list) == _sum + out_sum:
                if c_mark == 0:
                    class_0.remove(c)
                    class_1.append(c)
                else:
                    class_1.remove(c)
                    class_0.append(c)

        if plot_matplotlib:
            color = ['red', 'blue']
            fig, ax1 = plt.subplots(1)
            y_pred = km.labels_

            for i in range(n_cluster):
                ax1.scatter(data.iloc[y_pred == i, 0],
                            data.iloc[y_pred == i, 1],
                            marker='o',
                            s=50,
                            c=color[i])

                ax1.scatter(centroid[:, 0],
                            centroid[:, 1],
                            marker='x',
                            s=50,
                            c='black')
            plt.savefig('./ttesst.jpg')
            plt.show()

        # 不需要聚类那一边的点
        # class_another = [x for x in range(0, 17) if x not in class_0
        #                     and x not in class_1].remove(self.city_start) 注意这个列表推导式有毒!

        # 另一边的点
        class_another = []
        for x in range(0, 17):
            if x not in class_0:
                if x not in class_1:
                    class_another.append(x)

        # fp =  open('./地图可视化.pk', 'wb')
        # pickle.dump({2:class_0, 5: class_1, 8:class_another}, fp)
        # f = open('./城市经纬度.pk', 'wb')
        # pickle.dump(self.map_dict, f)
        # ff = open('./m_list.pk', 'wb')
        # pickle.dump(self.m_list, ff)
        # fp.close()
        # f.close()
        # ff.close()

        if plot_echarts:
            temp_d = {}
            d = {2: class_0, 5: class_1, 8: class_another}
            for key, value in d.items():
                for v in value:
                    if v == self.city_start:
                        continue
                    temp_d[self.m_list[v]] = key
            temp_d[self.m_list[self.city_start]] = 11
            g = Geo()
            g.add_schema(maptype='河南')
            data_pair = list(temp_d.items())
            g.add('', data_pair, type_=GeoType.EFFECT_SCATTER, symbol_size=15)
            g.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
            pieces = [
                {
                    'min': 0,
                    'max': 3,
                    'label': '类别1',
                    'color': '#50A3BA'
                },  # blue
                {
                    'min': 4,
                    'max': 6,
                    'label': '类别2',
                    'color': '#81AE9F'
                },  # green
                {
                    'min': 7,
                    'max': 8,
                    'label': '类别3',
                    'color': '#E2C568'
                },  # yellow
                {
                    'min': 10,
                    'max': 12,
                    'label': '起始点',
                    'color': '#FF8C00'
                }  # orange
            ]
            g.set_global_opts(
                visualmap_opts=opts.VisualMapOpts(is_piecewise=True,
                                                  pieces=pieces),
                title_opts=opts.TitleOpts(
                    title=f"物流路径规划-城市聚类-起始点{self.m_list[self.city_start]}"),
            )

            g.render(f'物流路径规划之城市聚类-{self.m_list[self.city_start]}.html')
            # self.fix_cluster_graph(class_0, class_1, class_another)

        return class_0, class_1, class_another