跳到主要內容

發表文章

目前顯示的是有「python視覺化」標籤的文章

使用python繪製Upset plot

  Upset plot 將集合視覺化,特別是當集合數大於 5 的時候, Upset plot 相較於 Venn plot 可以更清楚的呈現。 Upset plot 來自於 Venn plot 的變化, Venn plot 較常用於生物資訊呈現 ( 圖 1-3) ,但是往往會遇到集合數太多不易呈現的情況,從下圖可清楚看到當集合數為 4 的時候,畫面已經有些複雜,所以 Venn plot 的缺點就是當集合數過多時,畫面所呈現的資訊反而會造成視覺上的負擔,增加訊息解讀的困難性,失去視覺化的意義 — 方便閱讀,因此當集合數 ≥5 時不建議使用 Venn plot ,而後衍生出 Upset plot 。 Upset plot 優勢在於當集合數 ≥5 時可以清楚呈現資訊,不會造成視覺上的混亂。 2020 年影響全球的 COVID-19 ,在面對未知的流行病時沒有人可以確定真正有效的治療物,因此優先挑出具有高度可能性的藥物,嘗試用於治療病患,在高度不確定性的情況下會產生多種治療組合,這樣的情況就很適合採用 Upset plot 呈現 Real World 用藥資料,這裡有一篇發表於 CANCER DISCOVERY 的文章 ,這是一個很好的實務範例 ( 圖 4) ,以下擷取這篇 paper 的部份數據,簡單的做個 Upset plot 。 操作步驟 1. 選定主題,準備素材 以這篇文章中的數據來畫 Upset plot 圖 。開始執行前,需要先安裝 Upset plot 的套件。在 Window 環境下,開起命令提示字元,輸入 pip install upsetplot ,安裝完成後,就可進入繪圖步驟。   2. 繪製 Upset plot 這邊帶入 paper 中前 10 筆的數據。 from upsetplot import generate_counts from upsetplot import plot from upsetplot import from_memberships example = from_memberships([['Azithromycin','Hydroxychloroquine'], ['Hydroxychloroquine'...

使用python繪製視覺化--圓餅圖(Pie charts)

圓餅圖主要是呈現整體中各組成間所佔的比例,是一個相對的概念,但如果想看的是各組成間絕對的差異,那一般則是採用長條圖呈現。 除此之外在繪製圓餅圖時不建議用 3D 圓餅圖,因為視覺上對角度的大小辨識較不敏銳,加上 3D 圖的呈現更添視覺判讀的難度,有時候甚至會產生誤判的情況。 在具備以上基本概念後,我們利用 python 的 Plotly 套件來繪製圓餅圖。這次分別以 2008 年、 2018 年來台旅客人次的資料做示範 ( 資料來源為交通部觀光統計資料庫 ) 。 觀光收益為賺取外匯的重要來源 全球經濟發展的推動下, 2018 年國際旅遊的人數較之前增加了 5% ,比原先 UNWTO 的預測提早 2 年達到 14 億人次大關,在此同時全球觀光產業收益增長到 1.7 兆美元。如此龐大的經濟效益顯示觀光產業儼然已成為許多國家賺取外匯的重要來源。 因應這樣具重要性之議題,我們分別以台灣 2008 年、 2018 年這兩年的來台觀光旅客人次用圓餅圖呈現,這部分參考觀光交通部觀光統計資料庫的旅客分類將之區分為 7 類,以下整理做表呈現 : 操作步驟 1. 選定主題,準備素材 以 2008 年、 2018 年來台灣觀光旅客人次資料 做 為操作範例 ( 資料來源為觀光交通部觀光統計資料庫 ) 。 這個範例不只利用圓餅圖內佔比的大小表示各國旅客佔總體來台觀光旅客的比例,還融入了另一個概念,利用圓餅圖的大小 ( 總面積 ) 呈現不同年分總體旅客人次的多寡,也就是將一個圓餅圖作 2 個概念的呈現。 2. 確認繪圖需要用到的參數 : 圓餅圖比例 : 各國旅客人次 3. 繪製圓餅圖 這邊要說明一下 Plotly 內建的語法可以將繪圖區切割成 2 以上的部份,不過依本範例操作的需求僅切成左右 2 個部分即可,並利用內建的語法依據這兩個年份總旅客人次比例計算餅的相對大小 ( 總面積 ) 。 import plotly.graph_objects as go from plotly.subplots import make_subplots labels = ["中國大陸", "港澳", "日本", ...

使用python繪製視覺化--樹狀圖(Treemap)

樹狀圖在某些特點上跟泡泡圖的類似,都可以提供不只 1 個維度的資訊,並透過形狀大小、顏色來呈現。但是比較不同的地方是樹狀圖有層級的概念,可以用來呈現階層式資料。例如將全臺灣當作第一層,縣市當做第二層 ( 分支 ) ,再下一層則是縣市人口年齡組成。 在這基本概念下利用 python 的 Plotly 套件來繪製堆疊區域圖。這次以 2013-2016 年 國民營養健康調查報告書中的數據為例。 以下針對 2013-2016 年 國民營養健康調查做簡單的介紹 : ²   目的 : 隨時代改變人們飲食習慣也隨之改變,為了對國人的營養健康狀況有所了解,從 1980 年開始委託衛生署食品衛生處、衛生署食品藥物管理局定期辦理全國性營養健康調查, 2013 年起改由衛生福利部國民健康署定期辦理。 2013-2016 年的調查為第五次的國民營養調查。 ²   調查對象 : 所有居住在臺灣本島及澎湖設有戶籍的人口,依據縣市人口比例分層集束抽樣,進行家戶田野調查。 ²   問卷 : 除人口社經等基本資料的收集外,包含 24 小時飲食回顧、飲食頻率、疾病史、營養知識態度與行為、活動量等相關問卷以及身體健康檢查資料。 2013-2016 年總計問卷完訪人數有 11,072 人,體檢人數為 9746 人。 十大死因中心血管疾病常常榜上有名,可見一直是國人重要的死亡原因之一,但因疾病病徵較不明顯,相較於癌症來說反而容易受到忽略,但實則不可輕忽,應即早預防與控制,其中抽煙、高血壓、糖尿病、高血脂等都是心血管疾病的危險因子,本次以高膽固醇數據做示範,了解 2013-2015 年不同年齡層高膽固醇盛行的情況。 操作步驟 1. 選定主題,準備素材 以 2013-2016 年 國民營養健康調查中高膽固醇盛行率為例 ( 衛生福利部國民健康署公告的資料 ) ,了解不同年齡層收到的檢體中,高膽固醇盛行的形況。開始執行前,尚未安裝 plotly 者需要先安裝幾個套件 plotly 、 numpy 以及 squarify ,在 Window 環境下,開起命令提示字元,輸入 pip install plotly ,其他套件也以相同的方式匯入,安裝完成後,就可進入繪圖步驟。 用 Squarify 這個套件來計算圖形區域的分...

使用python繪製視覺化--熱圖(Heatmap)

熱圖簡言之就是將數值的大小用顏色深淺來呈現,將量化數據透過視覺化的方式傳遞,讓閱讀者可以快速獲取資訊。 在這基本概念下利用 python 的 Plotly 套件來繪製熱圖。這次以 2019 年 1 月到 8 月空氣品質數據為例做二維圖表的熱圖 ( 資料來源為 環保署的監測網 ) 。 空氣品質議題受到全球關注 : 隨著科技發展的同時,環境相關的議題也受到國際重視,包含空氣品質對於健康之衝擊等議題,其中以 PM2.5 對健康的影響最為受到關注。唯影響空氣品質的因素複雜,需立基於全球觀點共同探討空氣汙染、氣候改變對健康的衝擊,因此探討對於健康之影響並非本篇著墨的重點。空氣品質的議題固然龐大,基於民眾的立場,我們應該具備基礎認知以及對生活環境的關注,以因應大環境的變化。 即時空氣品質指標 (AQI) 空氣品質指標 (AQI) 是描述空氣品質的指數,全世界並沒有針對這個指標有一致的規定,各國可以依據不同的情況調整,制定適合的空氣指標,因此不同國家會有不同的 AQI 指標,例如加拿大與美國 AQI 指標就不太一樣。但指標都有一致共通點,當指標數值越高皆表示空氣品質越差。 目前臺灣環保署所採用的即時空氣品質指標 (AQI) 則是參考美國環境保護署標準而制定。 加拿大空氣品質指標 ( 參考來源 : 加拿大政府網站 ) 美國空氣品質指標 ( 參考來源 : 美國環境保護署 ) 臺灣空氣品質指標 臺灣環保署偵測 O 3 、 PM 2.5 、 PM 10 、 CO 、 SO 2 、 NO 2 等 6 個測項之即時副指標值,各副指標皆有不同的濃度計算方式,有興趣的人可連結至 臺灣環保署網站查詢 ( https://taqm.epa.gov.tw/taqm/tw/b0203.aspx ) ,計算後的濃度值對應到「污染物濃度與即時副指標值對照表」,取其中最大值為即時空氣品質指標,該汙染物則為指標污染物。 空氣品質監測資源 (1)   環保署的監測網提供空氣品質監測資料 ( https://taqm.epa.gov.tw/taqm/tw/ ) 。 (2)   民間自立架設監測之空氣品質監測資料 ( https://airbox.edimaxcloud...

python網路爬蟲輕鬆取得氣候資料(2)

延續上一篇的內容,這篇就不贅述,以中央氣象局 CODiS 平台實際操作網路爬取氣候資料。 操作步驟 : 1. 了解 HTML 網頁語法基本編寫概念 在網頁上按 F12 可以瀏覽網頁原始碼, html 架構由以下的基本元素組成。   ²   網頁的所有內容會包含在 < html> 和 < /html> 標籤之間 ²   網頁中重要元素或定義會放在 < head> 和 < /head> 標簽之間,例如 : 放置網頁標題的 < title> 標籤,就會放置在 head 裡面。 ²   網頁中所呈現的內容 ( 可視化的部份 ) ,會放於 < body> 和 < /body> 標籤之間。其中標示文章標題的標籤 < h1> 以及標示文章內文的標籤 < p> 都會放置於 body 標籤下。 2. 查看頁面,確認可行的爬蟲方式 以中央氣象局 CODiS 平台為例,可能可行的方式有 2 種, (1) 透過圖 1”CSV 下載 ” 的方式直接下載 CSV 檔案 (2) 爬取該網頁報表上的數值,再由程式轉換成檔案。 方式 1: 從 html 原始碼中找到對應 ”CSV 下載 ” 標示的編碼 ( 如下圖 1 、 2) 。這邊的編碼還另外包含了 CSS 的編碼, CSS 為在 html 主架構下細部內容之編寫。在 < a id=”downloadCSV” herf=”#”> 這段內容中, herf 後面接超聯結的路徑,但是這個網頁編碼後面接的是 # 而不是個路徑,這個 # 代表為前面的 id ,而 id 的屬性則在 html 中另外編輯屬性套用。所以看要再回去查看 # downloadCSV 那部份的程式編寫。不過查看後發現如果要透過路徑連結批量下載 CSV 檔的途徑似乎不可行,這部份讀者也可以自己再去確認看看。 圖 1 圖 2 網站管理員為了避免資料這麼容易被取得,所以將程式撰寫較為複雜,增加取得難度的情況相當常見,所以大家在爬蟲的時候不要一些挫折就氣餒。 方式 2: ...