藥品交互作用網頁文字轉存成格式化的資料表 - Challenge
在經過前面 4 篇「列轉欄」的修練後,我來分享一個在工作上實際的案例,步驟雖然簡單,卻是滿滿的干貨。
這是一個醫藥界位居翹楚的 MicromeXXX「藥品交互作用查詢結果」的網頁,我希望將它轉換成 excel 資料表,以便能匯入到 HIS 使用。以下是一些特性與限制:
- 網頁文字可以複制。
- 網頁原始碼檢視只能看到一些程式碼以及版權宣告,完完全全找不到任何網頁的內文,也就是說想要依靠解析網頁原始碼中的 HTML 標簽來擷取資料這招,在這裡無用武之地。
由於這網頁內容是付費資料,醫院雖有購買,但不代表著可以將它大勒勒的曝露在大眾面前,所以一切敏感內容都被遮蔽!
【網頁文字轉存成格式化的資料表 】關鍵的部份完成後,接下來若想要全流程自動化,那麼我會把院內每個藥品的交互作用網址 URL 存成 EXCEL 檔,用 VBA 寫迴圈,每季按一鍵就去抓取院內千百個藥品"最新"的交互作用資料,並且再讓它比對一下和上次抓取的檔案是否有更新,有更新的再丟給 HIS 去滙入,這樣就達到了徹底懶人化的目標囉~~~~
檔案下載:藥品交互作用網頁文字轉存成格式化的資料表
Thst’s begin~~
這是一個藥品交互作用網頁,內容呈現 CLOPIDOGREL 這藥品與下面哪些藥品有交互作用,以及一些特性的敘述。
內容看起來就像這樣。
在進入 Power Query 之前,我們先看一下整體資料長成什麼樣子。
前面 5 列是要移除的,藥名之下的就是一些特性,似乎都是以 數字) 的方式來列表
再往下看一看,8) 裡面的列表是以 英文) 的方式來呈現。
到這裡我可以歸納出一個規則,藥名就是文字內沒有 “)” 符號,特性就是有 “)” 符號。
step 1 - 移除頂端 5 列。
step 2 - 移除底端 4 列。
step 3 - 為了要將資料分組,我需要加入一行輔助資料行,用來判斷從第n列到第n列是同一組資料。
step 4 - 以 向下填滿 的方式,把 null 填入 藥名。
step 5 - 以 [學名] 來分組
Step 6 - 由於 Table 的內容有 2 個欄位,我只需要 [欄1] 這一欄而已,所以使用 Table.Column 這個方法,把 [欄1] 取出來,並且傳回成清單(list)。
Step 7 - 把清單展開,以 "擷取值” 的方式。
如果使用 "展開至新資料列”,你會發現好不容易聚合起來的欄1又被展開成一開始的樣子了。
因為裡面文字的內容有 , . : ; 空白….什麼都有,所以我用 5個# 來分隔
登登登~~~資料很完美地分割好囉~ 接下來就是一些瑣碎的工作了。
像是把前面二個資料行 [學名]、[Data] 移除。
把每一個資料行裡重覆的文字移除。例如 [清單.2] 裡的 1) Interaction Effect: …..
再譬如把欄位名稱改一改…
贅字取代完了,欄位名稱也改好了,就可以很高興地按下 "關閉並載入” 看看成果,資料一共有234筆。
接到最下面看看,嗯~ 原來 CLOPIDOGREL 這藥品與 食物、香菸 也有交互作用呀!
留言
張貼留言