Python精美地理可視化繪製——以中國曆年GDP數據爲例

點擊上方“ Python爬蟲與數據挖掘 ”,進行關注

回覆“書籍”即可獲贈Python從入門到進階共10本電子書

入我相思門,知我相思苦。

專欄作者:zch,經管專業研一在讀,Python數據分析及可視化愛好者。公衆號後臺回覆入羣,拉你進技術羣與大佬們近距離交流。

 
    
    
    

有的時候,我們需要對不同國家或地區的某項指標進行比較,可簡單通過直方圖加以比較。但直方圖在視覺上並不能很好突出地區間的差異,因此考慮地理可視化,通過地圖上位置(地理位置)和顏色(顏色深淺代表數值差異)兩個元素加以體現。在本文案例中,基於第三方庫pyecharts,對中國各省2010-2019年的GDP進行繪製。

我們先來看看最終效果:




01

關於繪圖數據


基於時間和截面兩個維度,可把數據分爲截面數據、時間序列及面板數據。在本文案例中,某一年各省的GDP屬於截面數據,多年各省的GDP屬於面板數據。因此,按照先易後難的原則,先對某一年各省的GDP進行地理可視化,再進一步構建for循環對多年各省的GDP進行可視化,形成最終的時間輪播圖。


數據來源:本文案例使用的GDP數據來源於國家統計局官網,可在線下載到本地,保存爲csv或excel格式,用pandas中的DataFrame進行讀取。



02

地理可視化



一、全國各省單年GDP的可視化

在pyecharts中可使用Map類型實現地理可視化,其原理是通過不同顏色填充以展現不同的數據,options實現圖表的調整及修飾。代碼展示如下:


    
    
    
import pandas  as pd
from pyecharts.charts  import Map
import pyecharts.options  as opts

frame = pd.read_csv( 'C:\\Users\\dell\\Desktop\\分省年度數據2.csv',encoding= 'GBK')
map = Map()
map.add( "我國地區的GDP",frame[[ '地區', '2019年']].values.tolist(), "china")
map.set_global_opts(visualmap_opts=opts.VisualMapOpts(min_= 500,max_= 12000))
map.render( "2019年全國各地區GDP.html")

解析 :add()來實現了數據的加載,在配置3個參數中——第1個是圖的標題,第2個通過.values.tolist()加載要顯示的數據,第3個"china"確保顯示的地圖類型是中國。有個細節需要注意,Map 使用的中國各省份需要將全部的省、市、自治區等去掉。set_global_opts()實現了用顏色標記數據的數值大小,參數min_和max_分別代表最小值和最大值。render()用於生成並保存圖像。

效果如下:


然而數據分佈並不平均,可以通過is_piecewise 屬性表述分段自定義不同的顏色區間:


    
    
    
geo.set_global_opts(visualmap_opts=opts.VisualMapOpts(
    is_piecewise= True,
    pieces=[
        { "min": 0, "max": 10000, "label": "1~10000", "color": "cyan"},
        { "min": 10001, "max": 20000, "label": "10001~20000", "color": "yellow"},
        { "min": 20001, "max": 50000, "label": "20001~50000", "color": "orange"},
        { "min": 50001, "max": 80000, "label": "50001~80000", "color": "coral"},
        { "min": 80001, "max": 120000, "label": "80001~120000", "color": "red"},
    ]   
))

效果如下:



二、全國各省多年GDP的可視化

由於要繪製2010-2019年的GDP數據,可以考慮構建一個for循環,通過str(i)+"年"的形式訪問數據表格中處於不同列的各年GDP數據。繪製輪播圖可考慮調用Timeline,代碼如下:


    
    
    
import pandas  as pd
from pyecharts  import options  as opts
from pyecharts.charts  import Map, Timeline

frame = pd.read_csv( 'C:\\Users\\dell\\Desktop\\分省年度數據2.csv',encoding= 'GBK')
tl = Timeline()
for i  in range( 20102020):
    map0 = (
        Map()
        .add( "省份",frame[[ '地區',str(i)+ '年']].values.tolist(),  "china")
        .set_global_opts(
            title_opts=opts.TitleOpts(title= "Map-{}年GDP(億元)".format(i)),
            visualmap_opts=opts.VisualMapOpts(
                is_piecewise= True,
                pieces=[
                    { "min": 0, "max": 10000, "label": "1~10000", "color": "cyan"},
                    { "min": 10001, "max": 20000, "label": "10001~20000", "color": "yellow"},
                    { "min": 20001, "max": 50000, "label": "20001~50000", "color": "orange"},
                    { "min": 50001, "max": 80000, "label": "50001~80000", "color": "coral"},
                    { "min": 80001, "max": 120000, "label": "80001~12000", "color": "red"},
                ]   ),))
    tl.add(map0,  "{}年".format(i))
tl.render( "2010~2019年全國各地區GDP.html")

效果如下:




03

小結


本案例的實現並不複雜,在pyecharts官方的參考案例基礎上稍加改動即可實現。作爲一名初學者,模仿案例是提升功力的重要途徑,通過模仿可以有效喫透代碼要具體實現的功能,量變到質變,就能根據自己工作和學習的需要進行靈活應用。

------------------- End -------------------

往期精彩文章推薦:

歡迎大家點贊,留言,轉發,轉載,感謝大家的相伴與支持

想加入Python學習羣請在後臺回覆【入羣

萬水千山總是情,點個【在看】行不行

/今日留言主題/

隨便說一兩句吧~

本文分享自微信公衆號 - Python爬蟲與數據挖掘(crawler_python)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章