<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          原來(lái)炫酷的可視化地圖,用Python就能搞定!

          共 6393字,需瀏覽 13分鐘

           ·

          2021-04-29 14:14


          對(duì)于可視化地圖,Pyecharts是小F以前用的最多的。


          還有應(yīng)該就是一些網(wǎng)站了,現(xiàn)成的工具,不需要敲代碼。


          在5G手機(jī)可視化那一篇文章,也是用Pyecharts做的地圖~



          而對(duì)于Matplotlib,目前小F還沒(méi)有使用它繪制過(guò)地圖。


          所以在查閱相關(guān)資料的時(shí)候,又發(fā)現(xiàn)了大佬造的輪子。


          Python+Selenium+Matplotlib,實(shí)現(xiàn)中國(guó)地圖可視化。


          地圖數(shù)據(jù)來(lái)源于民政部,真實(shí)可靠。


          項(xiàng)目地址:https://gitee.com/jixuanfan/Map-of-China



          由于小F之前一直用「GitHub」保存代碼,壓根就沒(méi)有注冊(cè)「Gitee」。


          而作者的代碼以及相關(guān)數(shù)據(jù)是上傳到「Gitee」上,需要注冊(cè)下載。


          不想注冊(cè)那么多賬號(hào),所以查了一下在不登錄情況下,能否下載項(xiàng)目代碼。


          CURL,是一個(gè)利用URL語(yǔ)法在命令行下工作的文件傳輸工具。


          # 在倉(cāng)庫(kù)地址(https://gitee.com/jixuanfan/Map-of-China)
          # 后面拼接/repository/archive/master.zip

          # 下載本例項(xiàng)目代碼
          curl -o data.zip  https://gitee.com/jixuanfan/Map-of-China/repository/archive/master.zip


          Windows或許需要安裝,那還是老老實(shí)實(shí)注冊(cè)賬號(hào),然后下載項(xiàng)目代碼。


          Mac和Linux應(yīng)該都是內(nèi)置CURL,直接使用命令就行,無(wú)需安裝。



          / 01 / 地圖數(shù)據(jù)獲取


          Get_Map,基于Python爬蟲,主要用到Selenium+正則。


          Selenium是一個(gè)用于測(cè)試網(wǎng)站的自動(dòng)化測(cè)試工具,這里我們主要是用它來(lái)模擬瀏覽器操作,進(jìn)而獲取地圖數(shù)據(jù)。


          安裝教程網(wǎng)上都有,推薦使用谷歌瀏覽器,驅(qū)動(dòng)文件和瀏覽器版本需一致。


          獲取地圖數(shù)據(jù)的兩個(gè)接口地址。


          # 首頁(yè)URL,獲取當(dāng)前所有行政區(qū)劃的代碼
          http://xzqh.mca.gov.cn/map

          # 查詢URL,獲取國(guó)家或省市的具體地圖數(shù)據(jù)
          http://xzqh.mca.gov.cn/defaultQuery?


          首先是獲取行政區(qū)劃的代碼,最小應(yīng)該是到縣一級(jí)。


          繪制不同類型的地圖,所需要的數(shù)據(jù)獲取函數(shù)如下。


          行政代碼不清楚,網(wǎng)上查詢一下就好咯~


          import Map_of_China as Map

          # 創(chuàng)建獲取地圖數(shù)據(jù)對(duì)象
          M=Map.Get_Map()

          # 獲取首頁(yè)全國(guó)各省的地圖數(shù)據(jù)
          M.Get_country()

          # 獲取一組省份內(nèi)各地級(jí)行政區(qū)劃的數(shù)據(jù)
          M.Get_provinces([32,43])

          # 自動(dòng)獲取全國(guó)尚未獲取的省份數(shù)據(jù)
          M.Get_provinces_auto()

          # 獲取一組地級(jí)市內(nèi)各縣級(jí)行政區(qū)劃的數(shù)據(jù)
          M.Get_cities([3201,3203])

          # 自動(dòng)獲取某個(gè)省尚未獲取的縣級(jí)行政區(qū)劃數(shù)據(jù)
          M.Get_cities_auto(32)

          # 獲取全國(guó)所有縣級(jí)行政區(qū)劃的數(shù)據(jù)(合并在一張地圖中)
          M.Get_country_county()


          數(shù)據(jù)主要包括形狀、形狀顏色、形狀輪廓、文字、文字位置、標(biāo)注點(diǎn)形狀、標(biāo)注點(diǎn)位置等。



          具體爬取代碼、數(shù)據(jù)解析及函數(shù)的相關(guān)參數(shù),查看Map_of_China.py文件可知。



          / 02 /  地圖數(shù)據(jù)呈現(xiàn)


          Draw_Map,基于Matplotlib繪制地圖。


          01. 繪制省/地級(jí)/縣級(jí)行政區(qū)劃的輪廓


          import Map_of_China as Map

          # 創(chuàng)建獲取地圖數(shù)據(jù)對(duì)象
          M = Map.Get_Map()
          # 創(chuàng)建繪制地圖對(duì)象
          D = Map.Draw_Map()


          # #獲取首頁(yè)全國(guó)各省的地圖數(shù)據(jù)
          M.Get_country()
          # 江蘇地圖
          D.Draw_single_shape('Data/Country/320000.txt', LC=[116169221],
                                             FC=[96139219], BC='w', lw=2, title='江蘇輪廓',
                                             img_path='jiansu.jpg')


          # 獲取各省份內(nèi)各地級(jí)行政區(qū)劃的數(shù)據(jù)
          M.Get_provinces([32])
          # 南京地圖
          D.Draw_single_shape('Data/Province/32-江蘇/320100.txt', LC='k', FC=None
                                             title='南京輪廓', img_path='nanjing.jpg')


          得到結(jié)果如下。


          函數(shù)可設(shè)置的參數(shù),有線條、填充、背景顏色,以及線寬、標(biāo)題、圖片保存路徑等。



          02. 繪制全國(guó)地圖


          import Map_of_China as Map

          # 創(chuàng)建獲取地圖數(shù)據(jù)對(duì)象
          M = Map.Get_Map()
          # 創(chuàng)建繪制地圖對(duì)象
          D = Map.Draw_Map()


          # 繪制全國(guó)地圖
          D.Draw_country(FC=True, img_path='china.jpg', arg={'provName'False,
                                   'city_name'True'city_pos'True'sea'False}, title='中國(guó)地圖')


          因?yàn)榍懊嬉呀?jīng)把全國(guó)的地圖數(shù)據(jù)爬取下來(lái),所以這里就省去了下載數(shù)據(jù)的代碼。


          得到結(jié)果如下。



          配色方案,默認(rèn)設(shè)置為民政部官網(wǎng)上的配色。



          有一些參數(shù)和輪廓圖相同,不過(guò)也添加了一些新的參數(shù)。


          比如南海地圖位置,顯示省份名稱,省份名稱顏色等。


          03. 繪制省份地圖


          import Map_of_China as Map

          # 創(chuàng)建獲取地圖數(shù)據(jù)對(duì)象
          M = Map.Get_Map()
          # 獲取廣東省份內(nèi)各地級(jí)行政區(qū)劃的數(shù)據(jù)
          M.Get_provinces([44])

          # 創(chuàng)建繪制地圖對(duì)象
          D = Map.Draw_Map()

          # 繪制廣東省地圖
          D.Draw_province('廣東', FC=True, LC='w', arg={'other'True'city_pos'True'city_name'True},
                                      img_path='guangdong.jpg')


          對(duì)于省份數(shù)據(jù),前面小F只爬取了江蘇省,所以這里需要爬取廣東省的地圖數(shù)據(jù)才行。


          得到結(jié)果如下。



          繪制省份地圖函數(shù)對(duì)應(yīng)的參數(shù)有。


          code可為省份的2位編碼或者名稱,此處設(shè)置為「廣東」。


          函數(shù)還包含繪制熱力圖的參數(shù),data和by_val。


          arg中的other設(shè)置為False時(shí),表現(xiàn)不顯示周圍省份或城市的地圖,默認(rèn)參數(shù)為True,即顯示。



          04. 地級(jí)行政單位地圖


          import Map_of_China as Map

          # 創(chuàng)建獲取地圖數(shù)據(jù)對(duì)象
          M = Map.Get_Map()
          # 獲取南京、深圳行政區(qū)劃的數(shù)據(jù)
          M.Get_cities([32014403])

          # 創(chuàng)建繪制地圖對(duì)象
          D = Map.Draw_Map()

          # 南京地圖(默認(rèn)樣式)
          D.Draw_city('3201', img_path='nanjing_city.jpg')

          # 深圳地圖(自定義樣式)
          D.Draw_city('深圳', FC=True, LC='w', arg={'other'True'city_pos'True'city_name'True},
                               img_path='shenzhen.jpg')


          得到結(jié)果如下。



          此處code為地級(jí)市的四位編碼。



          05. 繪制熱力圖

          將不同區(qū)域按值的大小填充不同顏色,可惜少了圖例。

          import Map_of_China as Map

          # 創(chuàng)建獲取地圖數(shù)據(jù)對(duì)象
          M = Map.Get_Map()
          # 創(chuàng)建繪制地圖對(duì)象
          D = Map.Draw_Map()

          # 文件路徑
          src = 'Example/GDP-2018.csv'
          # 按數(shù)據(jù)的相對(duì)大小(排名)顯示
          D.Show_data(src, by_val=False, arg={'default_color': [0.60.60.6], 'sea'False},
                               img_path='gdp.jpg', title='2018年各省市GDP')


          得到結(jié)果如下。



          CSV文件具體內(nèi)容格式如下。



          第一列為區(qū)域名稱或者編碼,第二列為數(shù)值。


          數(shù)據(jù)處理模塊Map_of_China.py文件中。



          參數(shù)by_val,絕對(duì)大小和相對(duì)大小,通常應(yīng)該都會(huì)選擇絕對(duì)大小這種方式展示的。


          就是作者的這個(gè)熱力圖,是沒(méi)有圖例的,等待更新~


          # 省級(jí)數(shù)據(jù)
          D.Show_data('Example/江蘇人口2018.txt''32', by_val=True, title='江蘇人口2018',
                      img_path='jiangsu_2018_1.jpg')
          # 配置地圖中的樣式
          D.Show_data('Example/江蘇人口2018.txt''32', by_val=True, LC='w', title='江蘇人口2018',
                      arg={'city_name'True'city_pos'True'other'True},
                      img_path='jiangsu_2018_2.jpg')


          TXT格式的數(shù)據(jù)也能使用。



          06. 繪制氣泡圖


          # 氣泡圖
          D.Bubble(src='Example/GDP-2018.csv', title='2018年各省市GDP', img_path='GDP_bubble.png')


          得到結(jié)果如下。


          氣泡顏色默認(rèn)為黃色,可自定義參數(shù)。



          發(fā)現(xiàn)和Pyecharts好像,相信在修改地圖配色、文本字體及位置后,地圖會(huì)變得更好看!


          不過(guò)限于時(shí)間,下期小F再來(lái)說(shuō)一說(shuō)~



          還有幾個(gè)功能,坐等大佬更新~


          相關(guān)代碼及文件我已上傳公眾號(hào),回復(fù)「地圖」即可獲取。


          如此就不需要你自己注冊(cè)賬號(hào),直接就能使用。


          萬(wàn)水千山總是情,點(diǎn)個(gè)  ??  行不行。



          ···  END  ···


          推薦閱讀:

          理解關(guān)聯(lián)規(guī)則算法

          Python中的高效迭代庫(kù)itertools,排列組合隨便求

          萬(wàn)字長(zhǎng)文詳解|Python庫(kù)collections,讓你擊敗99%的Pythoner

          Python初學(xué)者必須吃透這69個(gè)內(nèi)置函數(shù)!

          Python字典詳解-超級(jí)完整版

          全面理解Python集合,17個(gè)方法全解,看完就夠了

          Python正則表達(dá)式入門到入魔



          掃描關(guān)注本號(hào)↓

          瀏覽 85
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲无码一区二区三 | 国产深夜福利 | 色婷婷国产在线视频 | 久久精品波多野结衣 | 被黑人大屌 |