愛盈利(aiyingli.com)移動(dòng)互聯(lián)網(wǎng)最具影響力的盈利指導(dǎo)網(wǎng)站。定位于服務(wù)移動(dòng)互聯(lián)網(wǎng)創(chuàng)業(yè)者,移動(dòng)盈利指導(dǎo)。我們的目標(biāo)是讓盈利目標(biāo)清晰可見!降低門檻,讓缺乏經(jīng)驗(yàn)、資金有限的個(gè)人和團(tuán)隊(duì)獲得經(jīng)驗(yàn)和機(jī)會(huì),提高熱情,激發(fā)產(chǎn)品。
文 | 巫銀良
移動(dòng)互聯(lián)網(wǎng)應(yīng)用和大規(guī)模社交網(wǎng)絡(luò)催生了海量的數(shù)據(jù)分析需求,時(shí)空數(shù)據(jù)作為記錄用戶和設(shè)備在現(xiàn)實(shí)世界分布和活躍程度的基礎(chǔ)數(shù)據(jù),一直為各大互聯(lián)網(wǎng)電子商務(wù)平臺(tái)和商家所關(guān)注。地理空間數(shù)據(jù)結(jié)合其他業(yè)務(wù)數(shù)據(jù)如何被分析利用,以及如何在分析中可視化呈現(xiàn)一直是現(xiàn)代化分析平臺(tái)的一個(gè)重要方向。
一方面各種地圖服務(wù)越來越多地集成到應(yīng)用中,成為應(yīng)用增強(qiáng)交互的組成部分(比如“附近的服務(wù)/人”,甚至連支付寶紅包都需要呈現(xiàn)各種方位關(guān)系,來增強(qiáng)樂趣),另一方面在分析行業(yè),如何能更高效方便地繪制各種地圖成為一種基本需求。
SAS作為分析行業(yè)的領(lǐng)導(dǎo)者和探索者,早在幾十年前就考慮到地圖這一基本元素在分析中的存在,因此它很早就在SAS語言中提供了能夠繪制地圖的能力。
考慮到SAS并不是地圖數(shù)據(jù)的生產(chǎn)者,只是利用數(shù)據(jù)。所以,在早些年,盡管SAS提供的地圖數(shù)據(jù)來源多種多樣,但SAS花了大量的時(shí)間精力來保證用戶地圖數(shù)據(jù)的精確性。
隨著現(xiàn)代衛(wèi)星和測繪技術(shù)的成熟以及一些其他原因(比如不再從CIA獲得世界數(shù)據(jù)),SAS不再維護(hù)既往的地圖數(shù)據(jù),而是和第三方廠商合作來提供能夠定期更新的最新數(shù)據(jù),這樣就不必考慮不同地理坐標(biāo)系統(tǒng)和地緣政治格局變化帶來的基礎(chǔ)地理數(shù)據(jù)更新。
在傳統(tǒng)上,SAS系統(tǒng)默認(rèn)提供MAPSSAS庫和PROC GMAP,PROC GPROJECT, PROC GREMOVE,GEONCODE等若干過程步來支持地圖繪制功能。利用這些基礎(chǔ)數(shù)據(jù)和過程步,用戶能很容易繪制世界地圖,各大洲地圖,各國家地區(qū)地圖。
從SAS 9.30M2 版本開始,SAS和GFK GeoMarketing合作,提供MPASGFK基礎(chǔ)庫,它能為用戶提供超過240個(gè)國家和地區(qū)精準(zhǔn)的數(shù)字郵政代碼和行政區(qū)劃地理數(shù)據(jù)。Gfk GeoMarketing的數(shù)字地圖是世界范圍內(nèi)最全最完整的數(shù)字地圖,坐標(biāo)系統(tǒng)為WGS84并且定期更新。
圖1
據(jù)調(diào)查,MapGfK基礎(chǔ)庫包括2個(gè)世界級(jí)(其中一個(gè)world_cities為世界城市),22個(gè)洲級(jí),175個(gè)國家級(jí)6個(gè)美國州縣的地理數(shù)據(jù)與對(duì)應(yīng)屬性數(shù)據(jù)。雖然看起來很全,但也并非十全十美,比如我在操作中發(fā)現(xiàn)臺(tái)灣島沒有包括在中國數(shù)據(jù)內(nèi),2010年的北京核心四區(qū)合并為兩區(qū)等也沒有被更新數(shù)據(jù)。
下面,我們舉個(gè)最簡單的例子,來說明如何用SAS繪制現(xiàn)代化數(shù)字地圖:
1、如何繪制世界地圖
proc gmap map=mapsgfk.world data=mapsgfk.world;
id id;
choro id / nolegend;
run;quit;
運(yùn)行上面幾行代碼,SAS會(huì)在結(jié)果窗口中輸出如圖2結(jié)果:
圖2
2、如何繪制亞洲和中國地圖
如果你需要繪制亞洲或者中國地圖,則只需要將上面“world” 改為“asia”或“china”即可。
proc gmap map=mapsgfk.asia data=mapsgfk.asia;
id id;
choro id / nolegend;
run;quit;
輸出如圖3結(jié)果:
圖3
細(xì)心的你會(huì)發(fā)現(xiàn),亞洲地圖確實(shí)按照各個(gè)國家進(jìn)行了準(zhǔn)確的繪制,但中國地圖則看起來黑壓壓的一片(這其實(shí)反映的是俺們大中華確實(shí)是地大物博啊~~),九段線確實(shí)包括在內(nèi),但地圖中竟然沒有寶島臺(tái)灣。
3、如何將丟失的臺(tái)灣部分合并到大中華地圖
不要慌,下面我們介紹如何將缺失的臺(tái)灣部分和中國地圖合并為大中華地圖。
data mytaiwan;
set mapsgfk.taiwan;
id2=id1; id1=’CN-83′;
run;
data GreatChina;/*合并臺(tái)灣到大中華*/
set mapsgfk.china mytaiwan;
run;
proc gmap map= GreatChina data= GreatChina;
id id;
choro id / nolegend;
run;quit;
執(zhí)行上面的代碼,輸出如圖4結(jié)果。注意一下:臺(tái)灣竟然出現(xiàn)在屏幕正中央(四川盆地)位置。
圖4
為了將臺(tái)灣島移到指定位置,需要在調(diào)用PROC GMAP前執(zhí)行如下代碼,對(duì)臺(tái)灣島的數(shù)據(jù)根據(jù)中國的投影進(jìn)行變換。
…
proc GPROJECT data=GreatChina out=GreatChina LATLON PARMIN=mapsgfk.projparm PARMENTRY=china;
id id;
run;
proc gmap map=…
輸出如圖5結(jié)果:
圖5
4、如何優(yōu)化地圖
在實(shí)際制作地圖時(shí),并不需要這么多的細(xì)節(jié)數(shù)據(jù)。因此我們需要將不必要的地區(qū)和縣的邊界刪除,然后再調(diào)用PROC GMAP繪圖。
proc sort data=GreatChina out=tmpds;
by ID1;
run;
proc gremove data=tmpds out=tmpds;
by ID1;
id id;
run;
data GreatChina(drop=ID1);
set tmpds;
id=ID1;
run;
輸出如圖6結(jié)果:
圖6
5、如何給地圖標(biāo)記省份
為了給各省標(biāo)注上省名,我們可以利用MAPSGFK庫中已有的地圖屬性數(shù)據(jù)來繪制標(biāo)簽。此時(shí)需要利用系統(tǒng)自帶的宏 %annomac 和 %maplabel 來生成描述數(shù)據(jù)數(shù)據(jù)。
data GreatChina_data;
set mapsgfk.China_attr;
keep id1 id1name;
rename id1=id id1name=idname;
run;
%annomac;
%maplabel (GreatChina, GreatChina_data, anno_label, idname, id, font=%str(SimSun), color=black, size=1.5, hsys=3);
proc gmap map=GreatChina data=GreatChina_data;
id id;
choro id / nolegend anno=anno_label;
run;quit;
輸出如圖7結(jié)果:
圖7
我們可以看到,圖7的地圖顯示的是英文名稱,而且臺(tái)灣也沒有包括在內(nèi)?原因是 mapsgfk.China_attr 沒有包含臺(tái)灣的屬性數(shù)據(jù),需要我們自己創(chuàng)建。另外,我們要使用中文去顯示各省的標(biāo)注怎么辦?只需要使用 id1nameU 并且轉(zhuǎn)碼即可顯示正確的中文。
data mytaiwan_attr;
set mapsgfk.taiwan_attr;
id2=id1; id2name=id1name;
id1=’CN-83′; id1name=”Taiwan Sheng”; id1nameu= put(‘臺(tái)灣省’,$uesc200.);
isoname=’China’;
drop country ;
run;
data GreatChina_data;
set mapsgfk.China_attr mytaiwan_attr; /*合并臺(tái)灣省的描述數(shù)據(jù)*/
keep id1 id1nameU;
rename id1=id id1nameU=idname;
run;
%annomac;
%maplabel (GreatChina, GreatChina_data, anno_label, idname, id, font=%str(SimSun), color=black, size=1.5, hsys=3);
data anno_label; set anno_label; text=unicode(text);run;
proc gmap map= GreatChina data= GreatChina_data;
id id;
choro id / nolegend anno=anno_label;
run;quit;
輸出如圖8結(jié)果:
圖8
6、如何利用谷歌地球數(shù)據(jù)繪制地圖
雖然在 MAPSGFK 基礎(chǔ)庫中有很多基礎(chǔ)地理數(shù)據(jù),但在現(xiàn)實(shí)中依然不夠用怎么辦? 解決方案有兩種:
直接利用實(shí)際測量的地理數(shù)據(jù)創(chuàng)建自定義地圖;
利用谷歌地球?qū)С龅厍蛏先魏蔚貐^(qū)/建筑的 KML 數(shù)據(jù),然后導(dǎo)入到 SAS 里創(chuàng)建地圖。
例如圖9就是利用谷歌地球數(shù)據(jù)創(chuàng)建的谷歌總部第40號(hào)樓的地理數(shù)據(jù)。(圖10為 Google Earth里的樣子)
%MAPIMPORTX(DATAFILE=”test.kml”,out=%str(mymap), ID=201);
data mymap;set mymap;
x=long;y=lat;
run;
data mymap_data;
attrib ID length=$15 label=’Districts code’;
attrib IDNAME length=$55 label=’Districts name’;
infile datalines dsd;
input
ID
IDNAME
;
datalines4;
201,Google Building 40
;;;;
data mymap_data; set mymap_data;
length my_html $100;
my_html=’title=’||quote(trim(left(idname)));
run;
goptions reset=all;
goptions hsize=1024pt vsize=768pt;
ods html;
%let mymap=mymap;
%let mymap_data=mymap_data;
%annomac;
%maplabel (&mymap, &mymap_data, anno_label, idname, id, font=%str(SimSun), color=WHITE, size=1.5, hsys=3);
proc gmap map=mymap data=mymap_data;
id id;
choro id / nolegend anno=anno_label;
run;quit;
ods html close;
執(zhí)行上述代碼生成的結(jié)果如圖9:
圖9

圖10 Google Earth里的樣子
在互聯(lián)網(wǎng)上,有時(shí)聽見一些人抱怨SAS語言做出的圖表不夠美觀,顯得比較粗陋。其實(shí)造成這誤解的根本是沒有掌握SAS強(qiáng)大的特性控制功能和實(shí)現(xiàn)的靈活性。
為了展示SAS在繪制地圖方面預(yù)留的靈活性和特性控制,下面我將展示若干純粹利用SAS代碼繪制的各種現(xiàn)代化的復(fù)雜地圖。
圖11 SAS繪制空白中國省圖

圖12 SAS繪制的中國各省的衛(wèi)星地圖
SAS語言天生作為面向分析而設(shè)計(jì)的語言,它保留了非常多的擴(kuò)展性;我甚至發(fā)現(xiàn)在 SAS 地圖里可以繪制天氣云圖(如圖13所示)。正所謂倚天不出,誰與爭鋒?在分析行業(yè)里只有掌握了如何使用SAS這把倚天劍,才能使數(shù)據(jù)分析結(jié)果的展示一切皆有可能!
圖13 SAS 繪制的帶有衛(wèi)星云圖的中國分省圖
SAS GMAP 提供2D(choropleth)和3D(block, prism, surface)地圖的繪制和渲染,用來將分析變量和結(jié)果顯示在地圖上。
既往的研究表明,SAS用戶可以橋接任何地圖服務(wù)商的數(shù)據(jù),包括 MAPBOX,MAPQUEST, HERE,GOOGLE,ARCGIS和 AutoNavi(高德)的地圖和他們的各種變體:SATELLITE(衛(wèi)星圖),STREETS(街道圖),TERRAIN(地形圖)和TRAFFIC(交通圖)等。
PROC GMAP的所有奧秘其實(shí)都藏在它的MAP和DATA參數(shù)里,至于如何實(shí)現(xiàn),就需要在實(shí)際需求中與具體業(yè)務(wù)數(shù)據(jù)結(jié)合考慮。

圖14 利用SAS代碼繪制現(xiàn)代化地圖
愛盈利-運(yùn)營小咖秀 始終堅(jiān)持研究分享移動(dòng)互聯(lián)網(wǎng)App數(shù)據(jù)運(yùn)營推廣經(jīng)驗(yàn)、策略、全案、渠道等純干貨知識(shí)內(nèi)容;是廣大App運(yùn)營從業(yè)者的知識(shí)啟蒙、成長指導(dǎo)、進(jìn)階學(xué)習(xí)的集聚平臺(tái);