將舊有的變項合併創建新變項
在處理大數據時常常會遇到需橫跨多個資料庫間進行資料串連,因此可能會遇到幾個問題:
(1)不同資料庫間串連的鍵值欄位可能有多個,例如:ID與生日相同的資料才可互相串連。
(2)不同資料庫間串聯的鍵值不盡相同。
(3)要串聯的檔案之間有名稱相同的欄位,前幾篇文章有提到欄位合併的處理在SAS的語法上要注意檔案合併時欄位名稱相同會覆蓋的問題。
針對第1跟第2個問題,可先依據串聯不同資料庫鍵值的欄位需求先合併成一個unique id,後續直接用這個鍵值進行串連。合併後的新鍵值除了做為串檔用外,當資料處理時遇到原先鍵值不unique的情況,也會透過變項合併產生新的unique id來取代原先的id鍵值。
對於問題3,檔案合併遇到命名相同的欄位產生相互覆蓋的問題,這部分會透過變更名稱的方式來處理。
以簡單例子進行練習
手上有2種檔案:
(1)
調查的基本資料,裡面包含ID、Gender、Birthday、City(戶籍地)等資訊。
(2)
調查的結果,裡面包含ID、Birthday、City(收案地點)、Q_date(受訪日期)以及問卷題項。
問題1: 鍵值不unique
觀察第一份資料可以發現ID編號為007的有兩個且生日不同,因此判定可能是不同的人,編號重複編列,在這樣的情況下如果僅用ID串聯結果可能會是這樣。
在基本資料(A)的那兩筆ID為007的資料同時都會與調查結果(B)中ID為007那筆資料串連,但很明顯的是B資料的007合併生日判斷後可以發現不屬於A檔另一筆007的數據,因此原本unique的ID不為unique,因此合併ID與Birthday成為一個新的unique ID做為鍵值。
問題2: 不同檔案有相同的名稱
這兩個檔案中有2個欄位名稱相同,Birthday與City。在考量Birthday與ID將合併為新鍵值後,可暫擱一邊不需特別處理。但City部分的問題就比較大了,雖名稱相同但實際上代表的含意不同,如果不予理會,直接進行串檔,在某些軟體上會遇到欄位名稱相同相互覆蓋的問題,導致操作者到最後也搞不清楚最後留下來的City欄位到底是來自於哪個檔案,必須再從頭檢視。
以SAS進行變項合併
data test;set
id_list;New_ID=ID || Birthday;run;
新產生的New_ID由ID+Birthday合併產生,但是中間有空格(框框處),如果不要中間有空格的問題,可使用compress函數處理。
data test;set
id_list;New_ID=ID || compress(Birthday);run;
以Python進行變項合併
這邊同樣使用pandas的套件就可以了~
id_list["New_ID"]= id_list["ID"].map(str)+ id_list["Birthday"].map(str) #如果欄位非文字變項需用map(str)做轉換
以SAS進行變項名稱修改
data test;set
id_list;rename City=City_list;run; /*舊名稱=新名稱*/
以Python進行變項名稱修改
test=id_list.rename(columns={"City":"City_list"})
留言
張貼留言