本文作者:王玉婷,中南財經(jīng)政法大學金融學院
文字編輯:崔趙雯
技術(shù)總編:余術(shù)玲
??各位小伙伴、大伙伴大家好刺啦,我爬蟲俱樂部“張三豐”又回來啦~
1. 導讀
??大家應該還記得,前段時間我們揭了Sustainability的老底(《在Sustainability上發(fā)文最多的原來是這些高芯榔ⅲ》)玛瘸,整理了世界主要國家和地區(qū)的研究機構(gòu)在Sus上發(fā)文的名單和數(shù)量。為了更直觀地觀察各國的發(fā)文情況苟蹈,我發(fā)現(xiàn)了著名的空間數(shù)據(jù)可視化命令——spmap糊渊,作圖效果如下圖所示:
2. 語法及其簡單應用
??spmap是一個外部命令,首先我們需要安裝該命令:
ssc install spmap
??spmap的語法結(jié)構(gòu)如下:
??spmap [attribute] [if] [in] using basemap [, ///
???? basemap_options ///
???? polygon(polygon_suboptions) ///
???? line(line_suboptions) ///
???? point(point_suboptions) ///
???? diagram(diagram_suboptions) ///
???? arrow(arrow_suboptions) ///
???? label(label_suboptions) ///
???? scalebar(scalebar_suboptions) ///
???? graph_options]
??spmap的語法可以分為三層慧脱,spmap也是通過疊加這三個圖層來實現(xiàn)繪圖的渺绒。
??第一層:底層地圖(basemap)。代表由多個子區(qū)域組合而成研究區(qū)域,如在世界地圖中宗兼,各個國家和地區(qū)即為該地圖的子區(qū)域躏鱼。在Stata中,構(gòu)造底層地圖的數(shù)據(jù)集(countries_cor.dta)結(jié)構(gòu)如下圖所示:
??其中殷绍,_ID
是標識變量染苛,_X
和_Y
是用于橫、縱坐標主到,對于每個子區(qū)域(如茶行,中國)都擁有成百上千對(_X,_Y)來構(gòu)造該區(qū)域的形狀。我們來看一下世界地圖的輪廓镰烧。
cd D:\sus_part3\data
use countries_cor.dta,clear
scatter _Y _X,msize(vtiny)
??運行結(jié)果如下圖所示:
??該層還可以設置[attribute]
選項拢军,該選項是在使用spmap命令時,位于master數(shù)據(jù)集中的一個數(shù)值型變量怔鳖,比如各國在Sus上的發(fā)文總量(SUM)茉唉。我們通過設置漸變色來直觀地展示世界主要國家和地區(qū)的發(fā)文情況。
use draw_dbf.dta,clear //master數(shù)據(jù)集包含了[attribute]變量SUM
spmap SUM using countries_cor.dta, ///
id(_ID) clmethod(custom) /// **設置標識變量结执,分級類型為用戶自設**/
clbreaks(0 100 500 1000 2000 3000 5000 13000) fcolor(Reds2) /**設置分段度陆,設置漸變色為紅色漸變**/
??運行效果如下圖所示:
??第二層:根據(jù)研究需要,我們可以在底層地圖上添加各種空間對象(spatial objects)献幔。目前懂傀,spmap命令有6種空間對象可供選擇,分別是多邊形(polygon)蜡感、點(point)蹬蚁、線(line)、箭頭(arrow)和標簽(label)郑兴。比如犀斋,現(xiàn)在我們想突出顯示美國這個子區(qū)域:
**從世界地圖中將構(gòu)建美國區(qū)域的坐標對另存為USA_cor.dta**
use countries_cor.dta,clear
keep if _ID==252
save USA_cor.dta,replace
use draw_dbf.dta,clear
**第一層,底層地圖**
spmap SUM using countries_cor.dta, ///
id(_ID) clmethod(custom) ///
clbreaks(0 100 500 1000 2000 3000 5000 13000) fcolor(Reds2) /// **第二層情连,突出顯示美國區(qū)域叽粹,藍色填充,輪廓線粗細適中**/
polygon(data(USA_cor.dta) fcolor(blue) osize(medthin))
??運行結(jié)果如下圖所示:
??再比如却舀,我們想以發(fā)文量為比重描點虫几。
use draw_dbf.dta,clear
**第一層:底層地圖**
spmap using countries_cor.dta, id(_ID) /// **第二層:在底層地圖上描點,world_point.dta包含了描點的坐標xcoord和ycoord變量**/
point(data(world_point.dta) xcoord(xcoord) ycoord(ycoord) /// **第二層美化:設置比例變量為SUM挽拔,填充顏色為彩虹色**/
proportional(SUM) shape(o) size(large) by(_ID) fcolor(Rainbow))
??運行結(jié)果如下圖所示:
??第三層:根據(jù)自身的需要辆脸,我們可以在第一、第二層上添加更多元素(elements)螃诅,比如比例尺(scalebar)每强、標題(title)始腾、注釋(note)州刽、圖例(legend)等空执。
use draw_dbf.dta,clear
**第一層:底層地圖**
spmap SUM using countries_cor.dta, ///
id(_ID) clmethod(custom) ///
clbreaks(0 100 500 1000 2000 3000 5000 13000) fcolor(Reds2) ///
polygon(data(USA_cor.dta) fcolor(blue) osize(medthin)) /// **第二層:突出顯示美國子區(qū)域**/
title("世界主要國家和地區(qū)在Sustainability發(fā)表論文的數(shù)量",size(*1.2)) subtitle("Jan.2009-Sep.2020",size(*0.8)) /// **第三層:添加圖例、標題等其他元素**/
graphregion(margin(medium)) ///
note("Source:爬蟲俱樂部整理")
??運行結(jié)果如下圖所示:
3. 關(guān)鍵點
??綜合來看穗椅,使用spmap作圖有兩大難點辨绊。
??(1)獲取坐標數(shù)據(jù)集難
??在第二部分的簡單應用中,我們所用到的坐標數(shù)據(jù)集有:countries_cor.dta
:世界國家級地圖坐標數(shù)據(jù)集匹表,是使用shp2dta
命令轉(zhuǎn)換countries.shp
文件而來门坷。而.shp
由ESRI(Environmental Systems Research Institute)開發(fā)的shape文件,一個shape文件包括一個主文件袍镀,一個索引文件默蚌,和一個dBASE表。其中主文件的后綴就是.shp
苇羡。
??簡單來說绸吸,shape文件是美國一家地理信息系統(tǒng)技術(shù)公司制作的坐標數(shù)據(jù)文件,我們可以使用Stata的外部命令shp2dta
將該文件轉(zhuǎn)換為dta文件设江。shape文件可以在某度搜索锦茁,關(guān)鍵詞為“中國 shapefile”,或者從https://gadm.org/data.html
下載叉存。轉(zhuǎn)換命令為:
ssc install shp2dta
shp2dta using countries.shp, ///
database("countries_dbf") coordinates("countries_cor")
??USA_cor.dta
:美國地圖坐標數(shù)據(jù)集码俩。從countries_cor.dta
中提取的_ID
為252(代表美國)的坐標對。
??world_point.dta
:描點坐標數(shù)據(jù)集歼捏。該數(shù)據(jù)集包括發(fā)文量top10的國家的坐標對(每個國家只需要一組稿存,一般是該國的首都經(jīng)緯度),因為數(shù)據(jù)量比較小瞳秽,所以本勞模手工查找了這些國家首都的經(jīng)緯度瞭空,如果數(shù)據(jù)量比較大,也可以在某度中搜索逊笆,關(guān)鍵詞為“世界各國經(jīng)緯度表”谭羔。
??(2)理解master數(shù)據(jù)集和各坐標數(shù)據(jù)集的關(guān)系難
master數(shù)據(jù)集和各坐標數(shù)據(jù)集的關(guān)系確實一時難以理解,但肯定比《紅樓夢》的人物關(guān)系簡單痰洒。
??圖中方框為數(shù)據(jù)集文件瓢棒,圓圈代表對應的變量。其中的難點是丘喻,如何將master(我們自己的研究數(shù)據(jù)集)與basemap建立聯(lián)結(jié)脯宿?可以看到,我們是通過countries_dbf.dta
文件來建立聯(lián)結(jié)的泉粉。
??countries_dbf.dta
文件是轉(zhuǎn)換countries.shp
而來的文件之一连霉,其數(shù)據(jù)結(jié)構(gòu)為:
??我們自己的研究數(shù)據(jù)集draw_dbf
的數(shù)據(jù)結(jié)構(gòu)為:
??對比以上兩個數(shù)據(jù)集榴芳,我們發(fā)現(xiàn)它們有相同的變量NAME
,因此我們將兩者橫向合并:
use draw_dbf.dta,clear
merge 1:1 NAME using countries_dbf.dta,keepusing(_ID)
??這樣跺撼,我們就通過_ID
標識變量將master數(shù)據(jù)集與basemap數(shù)據(jù)集聯(lián)結(jié)起來了窟感。這也給我們一個提示:在整理自己的數(shù)據(jù)集(master)時應盡可能使每個觀測對象的名稱(NAME,比如國家名稱歉井、省市名稱等)與countries_dbf.dta
中一致柿祈。
??本文用到的所有數(shù)據(jù)集均可通過后臺回復spmap
獲取,快去打開Stata試試看吧~