120 11 個案例掌握 Python 數(shù)據(jù)可視化--百度地圖的綜合應(yīng)用

百度地圖的綜合應(yīng)用

在房產(chǎn)數(shù)據(jù)分析實驗中,我們熟悉了地圖的 Map 和 Geo 類,在城市以上層級的繪圖上,上述兩個類是首選,但是對于縣鎮(zhèn)、街道等層級的可視化,百度地圖是更好的選擇,本實驗通過出租車、外賣等數(shù)據(jù)集,對百度地圖接口的綜合應(yīng)用做了詳細(xì)的介紹。

創(chuàng)建百度地圖AK

百度地圖使用的前提是獲得百度授權(quán)的 AK,否則地圖無法正??梢暬?。可通過如下方式獲得百度 AK :
進入百度控制臺,網(wǎng)址 ;
點擊我的應(yīng)用,在彈出的頁面點擊創(chuàng)建應(yīng)用;
創(chuàng)建應(yīng)用的表單中,應(yīng)用名稱可以任意填寫,應(yīng)用類型須填寫瀏覽器端,Referer 表單中填寫一個 * , 表示所有網(wǎng)站都可以發(fā)起調(diào)用,后提交;
提交會自動返回我的應(yīng)用界面,此時可以發(fā)現(xiàn)生成了一條記錄,并可以找到剛才申請時填寫的應(yīng)用名稱;
鼠標(biāo)懸停在訪問應(yīng)用(AK)字符串時,字符串右上角會彈出復(fù)制,鼠標(biāo)點擊復(fù)制,則在剪貼板里獲得了百度 AK 的字符串。

如下圖所示:


image.png

默認(rèn)地圖樣式

!pip install pyecharts==1.7.1

默認(rèn)情況下,通過 BMap 調(diào)用的百度地圖與我們手機 APP 看到的樣式相同。

from pyecharts.charts import BMap
from pyecharts import options as opts

# 輸入百度 AK,字符串形式
# 本實驗必須輸入百度 AK 否則下文均無法運行
BAIDU_MAP_AK = 

bmap = BMap()
bmap.add_schema(
    baidu_ak=BAIDU_MAP_AK,
    center=[110, 35], # 地圖中心經(jīng)緯度
    zoom=8,  # 縮放等級, 國家級:5,省級:8,市級:10,街道級:12
    is_roam=True,   # 渲染后可滾動鼠標(biāo)滾輪進行全圖縮放
)
bmap.render_notebook()

上海地鐵路線分布圖

可以在 .add_schema() 接口中傳入 map_style 參數(shù)進行地圖樣式的設(shè)置,本例設(shè)置了主要地理元素的輪廓和填充,并突出顯示了上海市地鐵線路圖。

import matplotlib.colors as cs
map_style = {
    'styleJson': [
        {
            'featureType': 'all',
            'elementType': 'geometry.stroke',
            'stylers': {
                'color': cs.TABLEAU_COLORS['tab:blue']  # 設(shè)置輪廓線為藍(lán)色
            }
        },
        {
            'featureType': 'all',
            'elementType': 'geometry.fill',
            'stylers': {
                'color': cs.TABLEAU_COLORS['tab:gray']  # 設(shè)置填充色為灰色色
            }
        },
        {
            'featureType': 'all',
            'elementType': 'labels',
            'stylers': {
                'color': cs.TABLEAU_COLORS['tab:gray']  # 所有文字標(biāo)簽設(shè)置為和背景相同顏色(不顯示)
            }
        },
         {
            'featureType': 'highway',
            'elementType': 'labels',
            'stylers': {
                'visibility': 'off'  # 告訴公路標(biāo)簽不顯示
            }
        },
        {
            'featureType': 'subway',
            'elementType': 'geometry',
            'stylers': {
                'color': cs.TABLEAU_COLORS['tab:red']  # 地鐵線條標(biāo)注為紅色
            }
        },
        {
            'featureType': 'subway',
            'elementType': 'labels',
            'stylers': {
                'color': cs.TABLEAU_COLORS['tab:orange']  # 地鐵線標(biāo)簽標(biāo)注為橘色
            }
        },
    ]
}

bmap = BMap()
bmap.add_schema(
    baidu_ak=BAIDU_MAP_AK,
    center=[121.4648, 31.1891],  # 上海
    zoom=12,
    is_roam=True,
    map_style=map_style,
)
bmap.set_global_opts(
    title_opts=opts.TitleOpts(
        title='上海地鐵線分布圖',
        title_textstyle_opts=opts.LabelOpts(font_size=25, color='White')
    )
)
bmap.render_notebook()

東方明珠塔附近建筑物分布圖

與 Map 和 Geo 相同,可通過 .add_coordinate() 接口可以添加任意點的經(jīng)緯度和名稱進入地圖。本例將上海東方明珠塔添加進地圖并以散點圖的形式顯示。在地圖樣式上,突出顯示了建筑物(綠色填充地理塊)。

map_style = {
    'styleJson': [
        {
            'featureType': 'water',  # 設(shè)置河流
            'elementType': 'geometry',
            'stylers': {
                'color': cs.TABLEAU_COLORS['tab:blue']
            }
        },
        {
            'featureType': 'building',  # 設(shè)置建筑物
            'elementType': 'geometry.fill',
            'stylers': {
                'color': cs.TABLEAU_COLORS['tab:green']  # 設(shè)置填充色為綠色
            }
        },
        {
            'featureType': 'all',
            'elementType': 'labels',
            'stylers': {
                'visibility': 'off'
            }
        },
    ]
}

bmap = BMap()
bmap.add_schema(
    baidu_ak=BAIDU_MAP_AK,
    center=[121.506377, 31.245105],  # 上海東方明珠
    zoom=16,
    is_roam=True,
    map_style=map_style,
)

bmap.add_coordinate('tower', 121.506377, 31.245105)

bmap.add(" ",
         data_pair=[['tower',1]],
         type_="scatter",
         symbol_size=30,
         color=cs.TABLEAU_COLORS['tab:red'],
         label_opts=opts.LabelOpts(is_show=False))

bmap.set_global_opts(
    legend_opts=opts.LegendOpts(is_show=False),
    title_opts=opts.TitleOpts(
        title='東方明珠塔附近建筑物分布圖',
        pos_right="1%",
        pos_top="9%",
        title_textstyle_opts=opts.LabelOpts(font_size=25, color='white')
    )
)
bmap.render_notebook()

出租車路線圖

數(shù)據(jù)集介紹:
本實驗獲取了 88 輛上海出租車的行車數(shù)據(jù),數(shù)據(jù)主要由 3 個特征構(gòu)成:出租車編號,任一時間點的出租車經(jīng)度、緯度。每輛出租車的軌跡數(shù)據(jù)均按時間序列依次排列。

import pandas as pd
df=pd.read_csv('https://labfile.oss.aliyuncs.com/courses/3023/taxi.csv')
df.head()

準(zhǔn)備數(shù)據(jù)

import numpy as np

# 以 CSS4_COLORS 色系標(biāo)記出租車路線顏色
colors=[value for value in cs.CSS4_COLORS.values()]

# 逐次添加出租車軌跡進入 rountines 列表
rountines=[]
for i,taxi in enumerate(np.unique(df['taxi'])):
    data=df.loc[df['taxi']==taxi]
    taxi_rountines={        
        'coords':[[long,lat] for long,lat in zip(data['long'],data['lat'])],
        'lineStyle':{'normal':{'color':colors[i]}}       
    }
    rountines.append(taxi_rountines)

出租車軌跡圖繪制

map_style = {
    'styleJson': [
        {
            'featureType': 'all',
            'elementType': 'geometry.fill',
            'stylers': {
                'color': cs.TABLEAU_COLORS['tab:gray']
            }
        },
        {
            'featureType': 'all',
            'elementType': 'geometry.stroke',
            'stylers': {
                'color': cs.TABLEAU_COLORS['tab:blue']  # 設(shè)置輪廓線為藍(lán)色
            }
        },
        {
            'featureType': 'all',
            'elementType': 'labels',
            'stylers': {
                'visibility': 'off'
            }
        },
    ]
}

b = BMap(init_opts=opts.InitOpts(width='600px', height='900px',))
b.add_schema(
    baidu_ak=BAIDU_MAP_AK,
    center=[121.50, 31.22],
    zoom=12,
    is_roam=True,
    map_style=map_style

)
b.add(
    "",
    type_="lines",
    is_polyline=True,
    data_pair=rountines,
    linestyle_opts=opts.LineStyleOpts(opacity=0.2, width=3),
)
b.set_global_opts(
    legend_opts=opts.LegendOpts(is_show=False),
    title_opts=opts.TitleOpts(
        title='上海部分出租車路線圖',
        pos_right="1%",
        pos_top="9%",
        title_textstyle_opts=opts.LabelOpts(font_size=25, color='white')
    )
)
b.render_notebook()

外賣商家評分

數(shù)據(jù)集介紹:
本數(shù)據(jù)集來自于數(shù)據(jù)超市,數(shù)據(jù)集采集了北京 1000 條商家的外賣相關(guān)數(shù)據(jù),包括外賣商家,月銷售額,評論數(shù),用戶平分,外賣商家經(jīng)緯度坐標(biāo)等特征。
導(dǎo)入數(shù)據(jù)并查看前 5 行。

df=pd.read_excel('https://labfile.oss.aliyuncs.com/courses/3023/beijing_waimai.xls')
df.head()

將每個商家的評分?jǐn)?shù)以熱力圖的形式添加至地圖。

b = BMap()
b.add_schema(baidu_ak=BAIDU_MAP_AK,
             zoom=14.5, # 放大倍數(shù)到街道層級
             is_roam=True,
             center=[116.327, 39.983] # 大學(xué)城附近
             )
for name, long, lat in zip(df['name'], df['lng'], df['lat']):
    b.add_coordinate(name, long, lat)
b.add(" ",
      [[name, score] for name, score in zip(df['name'], df['score'])],
      type_="heatmap",
      point_size=9)
b.set_global_opts(
    title_opts=opts.TitleOpts(
        title='北京大學(xué)城外賣商家評分分布',
        pos_top='5%',
        title_textstyle_opts=opts.LabelOpts(font_size=25)
    ),
    visualmap_opts=opts.VisualMapOpts(
        min_=3,
        max_=5,
        range_text=["high", "low"],
        range_color=['green','yellow','red'],
        
    )
)

b.render_notebook()

外賣商家價格

同樣的方式,可以獲得商家平均價格的熱力圖分布圖。

data=df[['name','lng','lat','avg_price']].copy()

b = BMap()
b.add_schema(baidu_ak=BAIDU_MAP_AK,
             zoom=14,
             is_roam=True,
             center=[116.327, 39.983]
             )
for name, long, lat in zip(data['name'], data['lng'], data['lat']):
    b.add_coordinate(name, long, lat)
b.add(" ",
      [[name, avg_price] for name, avg_price in zip(data['name'], data['avg_price'])],
      type_="heatmap",
      point_size=11)
b.set_global_opts(
    title_opts=opts.TitleOpts(
        title='北京大學(xué)城外賣商家平均價格分布',
        pos_top='5%',
        title_textstyle_opts=opts.LabelOpts(font_size=25)
    ),
    visualmap_opts=opts.VisualMapOpts(
        min_=10,
        max_=70,
        range_text=["high", "low"],
        range_color=['green','yellow','red'],
        
    )
)

b.render_notebook()
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容