話說(shuō),刷朋友圈的時(shí)候,發(fā)現(xiàn)這樣一張圖:
全球人口按緯度分布,很明顯的可以看見(jiàn)北緯三十度附近,那是紅彤彤的一片……看完之后,蝦神突發(fā)奇想,就以中國(guó)而論是什么樣子呢?如果按經(jīng)度分布,又是什么樣子呢?
做為碼農(nóng),不能光想不練,說(shuō)動(dòng)手就動(dòng)手。

本代碼沒(méi)有任何技術(shù)難點(diǎn),關(guān)鍵是效率和速度。首先是數(shù)據(jù):2020全球人口1平方公里的柵格數(shù)據(jù),大家可以到下面去下載:https://www.worldpop.org/geodata/summary?id=24777
然后我在ArcGIS里面,截取了中國(guó)范圍的數(shù)據(jù),如下所示:可以看見(jiàn),中國(guó)大部分地區(qū)還是無(wú)人區(qū)(平方公里小于50人),而1000人一下的區(qū)域,也占到絕大多數(shù),密度比較高的幾個(gè)地方,比如長(zhǎng)三角、京津冀、珠三角:
好了,數(shù)據(jù)介紹結(jié)束,下面看看怎么作圖:
整個(gè)中國(guó)范圍內(nèi)的數(shù)據(jù),一共是5670行,7398列。首先對(duì)數(shù)據(jù)進(jìn)行統(tǒng)計(jì),分布圖的統(tǒng)計(jì)方式是以行列進(jìn)行累加,然后用累加的值做為這個(gè)一行(列)的值,所以很簡(jiǎn)單的分行列累加就行。但是,如何去累加就需要說(shuō)到說(shuō)到了,一般來(lái)說(shuō),寫習(xí)慣了傳統(tǒng)算法的同學(xué),想到的第一反應(yīng)肯定按行列就行循環(huán)累加……當(dāng)然,不能說(shuō)不行,但是這是一種效率超級(jí)低的方法:
這樣的迭代方式,把行統(tǒng)計(jì)完,需要7.5s……好吧,也不算太慢。但是有沒(méi)有更快的方法么?很簡(jiǎn)單,少一層迭代就行:
少一層迭代,取出每一行,然后用sum函數(shù)已處理,速度差不多提升了一倍。答案自然就是Python的天賦技能——調(diào)包:
直接用numpy的sum包,執(zhí)行僅需要26.8毫秒。。。效率比最慢的方式,快接近300倍!!所以,寫Python的時(shí)候,最關(guān)鍵的地方,在于調(diào)包,正如人類對(duì)工具的使用能力,決定了人類成為地球的霸主:Python調(diào)包的能力,決定了Python的效率。好了,關(guān)鍵的部分說(shuō)明了,下面就是繪圖了:





加入知識(shí)星球【我們談?wù)摂?shù)據(jù)科學(xué)】
500+小伙伴一起學(xué)習(xí)!
·?推薦閱讀?·
盤點(diǎn)2021最佳數(shù)據(jù)可視化作品
一行代碼實(shí)現(xiàn)地址信息解析
新一代Python包管理工具來(lái)了