空間數據可視化之spmap命令

2021-02-14 Stata and Python數據分析
各位小夥伴、大夥伴大家好,我爬蟲俱樂部「張三丰」又回來啦~

1. 導讀

2. 語法及其簡單應用spmap是一個外部命令,首先我們需要安裝該命令:

ssc install spmap

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也是通過疊加這三個圖層來實現繪圖的。

第一層:底層地圖(basemap)。代表由多個子區域組合而成研究區域,如在世界地圖中,各個國家和地區即為該地圖的子區域。在Stata中,構造底層地圖的數據集(countries_cor.dta)結構如下圖所示:

其中,_ID是標識變量,_X和_Y是用於橫、縱坐標,對於每個子區域(如,中國)都擁有成百上千對(_X,_Y)來構造該區域的形狀。我們來看一下世界地圖的輪廓。

cd D:\sus_part3\data
use countries_cor.dta,clear
scatter _Y _X,msize(vtiny)

該層還可以設置[attribute]選項,該選項是在使用spmap命令時,位於master數據集中的一個數值型變量,比如各國在Sus上的發文總量(SUM)。我們通過設置漸變色來直觀地展示世界主要國家和地區的發文情況。

use draw_dbf.dta,clear //master數據集包含了[attribute]變量SUM
spmap SUM using countries_cor.dta, ///
id(_ID) clmethod(custom) /// **設置標識變量,分級類型為用戶自設**/
clbreaks(0 100 500 1000 2000 3000 5000 13000) fcolor(Reds2) /**設置分段,設置漸變色為紅色漸變**/

第二層:根據研究需要,我們可以在底層地圖上添加各種空間對象(spatial objects)。目前,spmap命令有6種空間對象可供選擇,分別是多邊形(polygon)、點(point)、線(line)、箭頭(arrow)和標籤(label)。比如,現在我們想突出顯示美國這個子區域:

**從世界地圖中將構建美國區域的坐標對另存為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) /// **第二層,突出顯示美國區域,藍色填充,輪廓線粗細適中**/
polygon(data(USA_cor.dta) fcolor(blue) osize(medthin))

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))

第三層:根據自身的需要,我們可以在第一、第二層上添加更多元素(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)) /// **第二層:突出顯示美國子區域**/
title("世界主要國家和地區在Sustainability發表論文的數量",size(*1.2)) subtitle("Jan.2009-Sep.2020",size(*0.8)) /// **第三層:添加圖例、標題等其他元素**/
graphregion(margin(medium)) ///
note("Source:爬蟲俱樂部整理")

3. 關鍵點

綜合來看,使用spmap作圖有兩大難點。

(1)獲取坐標數據集難

在第二部分的簡單應用中,我們所用到的坐標數據集有:countries_cor.dta:世界國家級地圖坐標數據集,是使用shp2dta命令轉換countries.shp文件而來。而.shp由ESRI(Environmental Systems Research Institute)開發的shape文件,一個shape文件包括一個主文件,一個索引文件,和一個dBASE表。其中主文件的後綴就是.shp。

簡單來說,shape文件是美國一家地理信息系統技術公司製作的坐標數據文件,我們可以使用Stata的外部命令shp2dta將該文件轉換為dta文件。shape文件可以在某度搜索,關鍵詞為「中國 shapefile」,或者從https://gadm.org/data.html下載。轉換命令為:

ssc install shp2dta
shp2dta using countries.shp, ///
database("countries_dbf") coordinates("countries_cor")

USA_cor.dta:美國地圖坐標數據集。從countries_cor.dta中提取的_ID為252(代表美國)的坐標對。world_point.dta:描點坐標數據集。該數據集包括發文量top10的國家的坐標對(每個國家只需要一組,一般是該國的首都經緯度),因為數據量比較小,所以本勞模手工查找了這些國家首都的經緯度,如果數據量比較大,也可以在某度中搜索,關鍵詞為「世界各國經緯度表」。(2)理解master數據集和各坐標數據集的關係難
master數據集和各坐標數據集的關係確實一時難以理解,但肯定比《紅樓夢》的人物關係簡單。

圖中方框為數據集文件,圓圈代表對應的變量。其中的難點是,如何將master(我們自己的研究數據集)與basemap建立聯結?可以看到,我們是通過countries_dbf.dta文件來建立聯結的。countries_dbf.dta文件是轉換countries.shp而來的文件之一,其數據結構為:

我們自己的研究數據集draw_dbf的數據結構為:

對比以上兩個數據集,我們發現它們有相同的變量NAME,因此我們將兩者橫向合併:

use draw_dbf.dta,clear
merge 1:1 NAME using countries_dbf.dta,keepusing(_ID)

這樣,我們就通過_ID標識變量將master數據集與basemap數據集聯結起來了。這也給我們一個提示:在整理自己的數據集(master)時應儘可能使每個觀測對象的名稱(NAME,比如國家名稱、省市名稱等)與countries_dbf.dta中一致。

本文用到的所有數據集均可通過後臺回復spmap獲取,快去打開Stata試試看吧~ 

相關焦點

  • 空間數據可視化就這麼簡單,酷炫螞蟻金服開源地理可視化引擎L7
    導讀L7 是由螞蟻金服 AntV 數據可視化團隊推出的基於 WebGL 的開源大規模地理空間數據可視分析開發框架。L7 中的 L 代表 Location,7 代表世界七大洲,寓意能為全球位置數據提供可視分析的能力。
  • 「 Python數據可視化系列」3. 使用Leather進行數據可視化
    在本章中,我們將使用Jupyter Notebook、Python、數據可視化庫leather進行基本的數據可視化。要在筆記本單元格中執行OS命令,就要使用!作為前綴,示例命令如下:!dir該命令的輸出如圖(3-1)所示:
  • 數據可視化之R語言
    分類數據的可視化使用條形圖、點圖、柱形圖、脊柱圖、馬賽克圖、餅圖及四折圖連續數據的可視化使用箱線圖、直方圖、散點圖及其變種、帕累託圖==============================================一、分類數據的可視化
  • Matplotlib數據可視化!
    數據可視化,就是指將結構或非結構數據轉換成適當的可視化圖表,然後將隱藏在數據中的信息直接展現於人們面前。相比傳統的用表格或文檔展現數據的方式,可視化能將數據以更加直觀的方式展現出來,使數據更加客觀、更具說服力。數據可視化已經被用於工作科研的方方面面,如工作報表、科研論文等,成為了不可或缺的基礎技能。現在,就讓我們一起來學習下數據可視化的基礎知識。
  • 地理空間大數據可視化——GIS三維表現
    數據表達做得好賺的不比別人少大家可不要小看數據可視化表達哦。
  • 實戰:Python 可視化疫情數據之 可視化TOP10國家累積確診人數(6)
    實戰:Python 可視化疫情數據之 可視化TOP10國家累積確診人數(6) 2020
  • 數據可視化工具大集合
    所謂數據可視化是對大型資料庫或數據倉庫中的數據的可視化,它是可視化技術在非空間數據領域的應用,使人們不再局限於通過關係數據表來觀察和分析數據信息
  • 數據可視化之——wordcloud2
    這個包提供了一個HTML5詞雲數據可視化的R接口,可以很方便地將詞頻數據進行可視化。wordcloud2包主要有兩個重要的函數:wordcloud2: 繪製基於HTML5的詞雲圖letterCloud: 繪製英文字符或者單詞形狀的詞雲圖安裝採用如下命令進行安裝,因為是在線安裝,安裝時需要確保電腦能夠訪問github官網:require(devtools)install_github("lchiffon
  • 從數據可視化到交互式數據分析
    最新和最時尚的名字是數字科學,更具體地說是數據科學的一部分,稱為「探索性數據分析」,這是幾十年前偉大的約翰·圖基(John Tukey)發明的術語。簡單起見,我將其稱為:數據分析,或者是視覺數據分析,甚至是交互式視覺數據分析,以強調是可以與之交互的圖形表現(學術界和商界也稱之為視覺分析)。為何更多地談論數據分析?
  • 榮膺數據可視化卓越產品獎,蜂鳥視圖欲以生態之力做大空間信息...
    「在室內空間信息可視化市場上,蜂鳥視圖不想一家做大。我們希望通過自己的方式帶動整個市場的發展。只有這樣,整個室內空間信息可視化行業才會好,企業才能好。「  室內空間的智慧管理駕駛艙  說出這句話的是,是蜂鳥視圖平臺事業部總經理張群。
  • Matplotlib數據可視化方法總結
    數據可視化,就是指將結構或非結構數據轉換成適當的可視化圖表,然後將隱藏在數據中的信息直接展現於人們面前。相比傳統的用表格或文檔展現數據的方式,可視化能將數據以更加直觀的方式展現出來,使數據更加客觀、更具說服力。數據可視化已經被用於工作科研的方方面面,如工作報表、科研論文等,成為了不可或缺的基礎技能。現在,就讓我們一起來學習下數據可視化的基礎知識。
  • 數據可視化,請回答2018之可視化乾貨推薦
    :數據可視化指南》作者)為大家準備好了應對方案。此項目也獲得了2018年凱度信息之美的金獎。在2018年的Tapestry大會上,Elijah總結了近30年來的可視化的三次浪潮:80年代,大家都在用excel的時候,沒有什麼比清晰的表達圖形更重要了;當人們有了更高的追求的時候,第二次可視化浪潮帶著濃濃的代碼氣息狂奔而來,理解無能的童鞋可以看看這顆神奇的代碼之樹(如上圖)。
  • Mathematica-數據和函數的可視化
    Mathematica 提供了非常強大的繪圖功能, 並且提供了大量數學函數的圖形命令,您可以方便地組合成所需要的、複雜的二維和三維函數圖形
  • 數據可視化之旅:常用圖表對比
    《七天數據可視化之旅
  • 數據可視化設計系列(1): 數據可視化的定義
    這樣理解來,」可視化「也在描述一種「讓大家看見的」發展方向,或者能力。數據可視化的領域是廣博且在不斷擴展的,那用五個字去完整地整個領域終究稍顯單薄。本文旨在給數據可視化(Data Visualization)下一個定義,盡力為大家引入數據可視化的無窮趣味和無儘可能性。那麼,什麼是數據可視化呢?
  • SciPy2018大會:Python數據可視化常見類庫介紹
    會上分享了大量開源Python數據可視化未來的想法和經驗。根據會議資料,蟲蟲做了一些總結,和大家一起分享學習一下。主要是對目前Python數據可視化基本類庫的軟體分類、包的關聯及功能性做了比較分析。概述目前常見的Python可視化軟體類庫(SciVis),基本來源於主要基於1992 OpenGL圖形標準,可以提供三維或四維物理過程(3D+隨時間變化)的圖形密集可視化。
  • 自建Superset數據可視化平臺
    前言 & Superset介紹數據可視化話可以說是非常實用的一個技能,無論是Excel圖標,Python可視化,都可以讓大量的數據變得不是那麼枯燥,讓人一眼就能看出數據所反應的問題。如果你擅長vba,即使用Excel也能做出非常有用的動態可視化圖表,相比來說Python的確更適合用來數據可視化。基於我的淺薄理解,數據可視化就是Business Intelligence, 常見的商業BI工具包括Tableau,Power BI等等。而有些公司則自己開發BI工具,比如我們要講的Superset,就是Airbnb的工具。
  • Matlab四維數據可視化:三維坐標[x, y, z]和顏色
    上文我們講到了Matlab的三維可視化命令-mesh surf,有同學提到講一下四維數據的可視化,即有三維坐標[x, y, z],再用顏色表達第四維數據,如下圖所示。四維數據可視化:三維坐標[x, y, z]和顏色今天我們就說一種Matlab四維數據可視化的方法:三維坐標[x, y, z]和顏色。因為Matlab自帶的命令中沒有直接可視化四維數據的命令,所以我們需要用點小技巧,即用三維命令plot3畫出三維坐標[x, y, z],用顏色表示該點的第四維數據。
  • 遊戲中的數據可視化設計分析
    在不同的遊戲當中,可視化的作用有很大的差異。遊戲中的可視化可以向玩家展示所控制人物的一些屬性,如角色的血量、法力值、升級進度、遊戲貨幣數量等。還有一部可視化展示了周圍環境的信息,如遊戲隱藏空間、遊戲區域邊界、副本難度、路徑導航等等。
  • 數據可視化與信息可視化怎麼搞?
    數據可視化和信息可視化都是可視化的一種方式,數據可視化將資料庫中每一個數據項作為單個圖元元素表示,大量的數據集構成數據圖像,同時將數據的各個屬性值以多維數據的形式表示,可以從不同的維度觀察數據,從而對數據進行更深入的觀察和分析。信息可視化,旨在把數據資料以視覺化的方式表現出。信息可視化是一種將數據與設計結合起來的圖片,有利於個人或組織簡短有效地向受眾傳播信息的數據表現形式。