Biodiversity Analysis 程式介紹

程式 GitHub 首頁:https://github.com/yuwen41200/biodiversity-analysis

本文作者:陳耘志、蒲郁文
授權條款:創用 CC 姓名標示-非商業性 4.0 國際

目標

路殺資料分析

農委會特有生物研究保育中心與中研院資訊所合作,進行台灣 路殺 資料的整理與 網路平台 的架設。雖然目前該平台已經製作了 多種資料分析與視覺化的介面,但我們希望能夠更進一步地探索、分析這些資料,例如:了解各物種間是否有共現(co-occurrence)的情形,以便探討物種「二次路殺」的可能。(註:當一生物為了掠食另一被路殺的生物的屍體而被路殺時,便稱為二次路殺。)

通用的分析工具

我們希望我們開發的工具不只適用於路殺資料,還能適用於其他的生物觀測數據。Darwin Core Archive (DwC-A) 是全世界通用的生物多樣性資料標準,因此我們希望能先將我們既有的路殺資料轉換成 DwC-A 格式,再傳入我們開發的工具進行分析。我們開發的工具應該要對 DwC-A 標準有良好的支援,能夠正確地解析任何合乎 DwC-A 標準的檔案。

設計理念

由於 Python 在統計、分析方面擁有豐富的第三方函式庫,故採用 Python 撰寫

在此程式中,我們結合了資料視覺化(data visualization)與量化分析,讓使用者能夠一眼掌握資料的分佈,同時也能夠得到精確的數據。

透過 PyQt 建立圖形化使用者介面,方便生態學家乃至於一般大眾使用

Qt 是一套優秀的跨平台應用程式框架,而 PyQt 則是 Qt 的 Python 綁定(binding)。由於最新版的 Qt 尚未提供原生的 GTK+ 介面外觀(look and feel),我們決定採用 PyQt 5.6 版。

使用 MVC 架構,讓程式未來的擴展更簡便

我們採用軟體工程中常用的 MVC (model–view–controller) 架構,將一個大專案模組化為眾多小元件,藉此增加程式碼的可讀性與可維護性。

加入多執行緒、多行程等平行化技術,提昇程式的執行效率

此程式必須同時進行許多運算,例如:查詢線上 API、計算共現相關度、呈現內嵌網頁與執行圖形化使用者介面的 event loop 等等。這些運算本身都有一定的複雜度,也有可能會出其不意的當掉。我們不希望其中一個元件當掉就導致整個程式崩解,我們也不希望其中一個元件長期佔用其他元件的計算資源,造成其他元件無法進行。為了滿足這些需求,我們將它們分開到不同的執行緒或行程,並且確保他們可以互相傳遞訊息。

特色

物種分類階層查詢

  • 功能:自動查詢物種的各個分類階層(界、門、綱、目、科、屬、種)。
  • 實作:自動在背景開啟新的執行緒,查詢 GBIF API,得到 GBIF 提供的分類階層資料。如果查詢失敗,就直接忽略。此功能需要用到網路。

物種篩選

  • 功能:為使用者篩選出曾出現在特定時間、經緯度範圍內的物種的所有紀錄。

空間分析:空間分佈圖

  • 功能:將物種紀錄點在 OpenStreetMap 提供的地圖上,藉由不同顏色區別物種,不同半徑表示該筆紀錄所觀測到的個體數量。
  • 實作:透過 QWebEngineView 使用 Chromium 內嵌網頁,再透過 Folium 使用 LeafletOpenStreetMap 的圖磚(tile)畫在網頁上。

空間分析:空間相關度

時間分析:時間分佈圖

  • 功能:將物種紀錄點在一個橫軸為月份、縱軸為年份的座標上,並如同空間分佈圖一般,藉由不同顏色區別物種,不同半徑表示該筆紀錄所觀測到的個體數量。研究者可藉此推論各物種最頻繁出沒的季節為何、族群大小逐年增減的情形等。
  • 實作:使用 matplotlib 提供的函式庫,做出類似 GitHub punch card 的視覺化呈現。

時間分析:時間相關度

共現分析:共現相關度

  • 功能:找出整份資料集中無論在時間上或空間上都有很大的相關性的物種。
  • 實作:自動在背景開啟新的行程,枚舉所有觀測紀錄,挑選出相關性夠大的紀錄,對其做時間與空間的加權與正規化(normalization),藉此歸納出哪些物種在空間上與時間上皆有極大的相關性。為了提供更流暢的使用體驗,只有在使用者切換到共現分析頁面後才會開始計算共現相關度。若資料集有任何變更,共現相關度也會自動重新計算。

未來願景

  • 避免將整份資料集全部載入記憶體
  • 改善效能瓶頸
  • 使用生態學界慣用的分析、統計方法

輔助工具

輔助工具根目錄:utils

目標

路殺資料 DwC-A 檔製作

將台灣路殺觀測資料製作成 DwC-A 格式,另附上路殺照片與輔助網頁,方便生態學家探索。

說明

utils / image-tagger

  • 功能:將任意圖片加上指定的 CC 授權圖標與授權說明的浮水印,並且將圖片縮放至指定的大小。
  • 實作:在 Bash 腳本中呼叫 ImageMagick 子程式,透過多次迭代,將指定功能不斷加進輸出圖片中。

utils / roadkill-packer