SHP資料 Join from Table

人口,在地理學中,往往是很重要的研究面向

而GIS中,人口也是經常會被使用的資料

以目前政府所公布的資料來說

都已經將人口資料與發布區做結合並提供SHP

算是十分便民

但有些時候(期中期末)我們仍會需要自己動手將資料結合起來

這種將沒有空間屬性的文字資料加入SHP的動作,稱為"Join"


下面將教學如何將人口資料結合至行政區SHP當中


STEP 1

至政府公開資料平台,下載 "二級發布區圖" ,選擇目標行政區的二級發布圖

路徑:點擊--檢視資料\ 資源網址

這是內政部統計處建置的「統計區分類系統」

包括最小統計區、一級發布區及二級發布區,為一小統計區域之概念。

數個最小統計區合成一個一級發布區,數個一級發布區再合成一個二級發布區, 以此類推逐層向上建立台灣的社經資料統計發布之空間單元系統



**發布區有哪些?(由區域小至大)
          最小統計區:每一最小統計區人口不超過450人
          一級發布區:每一區域理想人口為450人
          二級發布區:每一區域理想人口為3000人
          三級發布區:鄉鎮市區層級
          四級發布區:縣市層級
          五級發布區:區域計畫分區
          六級發布區:全國

STEP 2

至國土資訊系統(SEGIS)  社會經濟資料服務平台

下載"統計區人口統計資料"  (下面教學以106年之二級發布區人口為範例)

選擇目標行政區的二級發布區人口資料


STEP 3

當然,你如果將壓縮檔解開,裡面就有已經是SHP的最小統計區圖......

將csv檔以記事本或excel或其他可開啟文字檔案的程式開啟

確認內容是否是人口資料,並且有二級發布區代碼


STEP 4

將載得的最小統計區SHP與人口csv檔於GIS軟體中開啟

STEP 5

將兩個檔案的屬性欄位表(Attribute Table)開啟

兩個都點選"Open",可同時開啟於一個視窗



STEP 6

觀察兩個欄位表的欄位差異

在"CODE2"欄位,兩張表都是"A6601-01"這樣的模式去編碼

而進行 Join 時,最重要的就是要去找到這樣相同的"直行(欄位)"

在文字或數字相同的情形下

GIS軟體可以將兩張表的資料進行結合

若沒有相同的欄位,在時間許可下,必須自行建置相同欄位讓電腦做對照

STEP 7

右鍵點擊 "二級發布區SHP",找到 JOIN的功能


--------------------------------------------------------------------------------------------------------------------------
**JOIN的想法**

JOIN是將文字資料結合的一種方式

"A需要B的資料所以使用A的JOIN"

以上面的例子來說就是:

"台中市的二級發布區SHP "需要 "人口" 的資料所以使用"台中市的二級發布區SHP "的JOIN

記得這樣的語句,就不會搞不清楚到底要按哪個圖層的JOIN功能
--------------------------------------------------------------------------------------------------------------------------

STEP 8

開啟 Join Data 功能

有兩個JOIN的方式可以選擇

第一個是 "from table",也就是從表格而來(csv 或 txt 或 xls之類的可以讀進來的檔案格式)
第二個是 "based on spatial join" ,也就是基於空間位置來結合,比如說我有台中市消防隊的點座標資料,我想知道他們各分布在哪些鄉鎮市區,必須是有空間位置的圖層才可使用這個



STEP 9

各個選項依序介紹

1.這張圖要跟別人JOIN的欄位是:在這裡當然是選剛剛判斷跟CSV檔相同的CODE2欄位

2.選擇要從哪個"表格Table" 加入資料:在這裡也就是選擇那個CSV

3.選擇那張表格要跟這張SHP對照的欄位:就是CODE2

4.Join時,
要留下"Keep all records"→  留下全部由table來的資料,即使沒有找到相同欄位可以結合,也留在最後。在一些研究方法中會想留下全部資料(來源與表格皆留下),也可以檢視哪裡資料有差距

要留下"Keep only matching records"→  只留下有相同欄位可以結合的資料其他的都捨棄。有時候表格的資料只佔了SHP資料的一部分(EX:我只有某個區的人口資料,但我有整個縣市的SHP),我並不需要那些沒有資料的部分所以捨棄。

5.當然你也可以點擊 "Validate Join" ,還不是真的將資料轉移過去,只是電腦預先測試這樣的設定是否可以進行JOIN操作成功



STEP 10

打開屬行欄位表可以看到人口資料已經結合到欄位內了

兩個 CODE2欄位也對應正確

進行JOIN後的檔案,並不是真的已經寫入,如果我們現在將二級發布區SHP關掉再打開,會發現JOIN的資料都不見了

這是JOIN表格資料的特性,只要關掉重開就可以重來一次,不會產生新的圖層


但這樣我們不能進行運算分析,因此我必須將JOIN的結果輸出成新的SHP圖層

因此,藉由 Export Data 產生新的SHP


STEP 10

但這東西真的能用嗎?

我選擇的是 "Keep only matching records",發現到行政區有些區塊不見
這些地方本身應該是河谷、港口、軍用基地等,不會有人居住或不是人口計算的範圍內

那你一定覺得,為什麼連河谷這種地方都被視為二級發布區的區劃範圍,原因很簡單,政府在畫分的時候,是利用整塊行政區去區劃,除了像大型軍事基地提前先畫為一區以外,其他都是按著可能的人口數量去預測劃分,並不預先考慮河谷等等。

所以,在研究上,遇到這樣整塊行政區有資料不見,是非常難進行分析的,因此,我們應該選擇"Keep all record"來讓行政區保持完整


STEP 11

因此,我們將二級發布區SHP重新讀入

並以 "Keep all records" 做 JOIN,就可以是完整的行政區了

當然不能忘記,還必須藉由 Export Data 產生新的SHP才算完成


在屬性欄位表中,可以觀察到許多欄位是沒有數值的"Null"

這就是剛剛以"Keep only matching records"那些消失的二級發布區

下圖藍色的部分,即是表示無資料的區域
因此,在地理研究要操作人口資料的時候,雖然一級、一級發布區這樣的尺度夠細,可以做到比鄉鎮市區人口更小的人口研究,但在資料上就會有這樣的缺陷,不可不慎!


總結

JOIN講究的是欄位的對應關係,找到完全相同的欄位才可以進行

若沒有相同欄位,則必須進行人工修改出

JOIN資料是不需要產生新的SHP,關閉圖層則資料就消失

到底該按誰的JOIN功能,"A需要B的資料,所以使用A的JOIN"


沒有留言:

張貼留言