1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        原來炫酷的可視化地圖,用Python就能搞定!

        共 6393字,需瀏覽 13分鐘

         ·

        2021-04-29 14:14


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


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


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



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


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


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


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


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



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


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


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


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


        # 在倉庫地址(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,直接使用命令就行,無需安裝。



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


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


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


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


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


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

        # 查詢URL,獲取國家或省市的具體地圖數(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()

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

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

        # 自動(dòng)獲取全國尚未獲取的省份數(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)

        # 獲取全國所有縣級(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()


        # #獲取首頁全國各省的地圖數(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. 繪制全國地圖


        import Map_of_China as Map

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


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


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


        得到結(jié)果如下。



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



        有一些參數(shù)和輪廓圖相同,不過也添加了一些新的參數(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è)熱力圖,是沒有圖例的,等待更新~


        # 省級(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ì)變得更好看!


        不過限于時(shí)間,下期小F再來說一說~



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


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


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


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



        ···  END  ···


        推薦閱讀:

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

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

        萬字長(zhǎng)文詳解|Python庫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)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            成人毛片视频网站 | 欧美天堂在线 | 免费在线亚洲视频 | 欧美日本美女网18 | 成人网站免费在线看 | 思思热在线精品视频 | chinamodel私拍大尺度 | 国产特黄A片AAAA毛片车振 | 人善交videohd另类hd | 啊灬啊灬啊灬快灬高潮了玉子 |