半技術文:如果想用熊貓 (Pandas) 做 Heat-map 又可以點做?

半技術文:如果想用熊貓 (Pandas) 做 Heat-map 又可以點做?逐步逐步黎,但求電腦白痴都學得識Ellan OuBlockedUnblockFollowFollowingApr 1睇左 華田 Watin 篇文教人用 Excel做製圖高手,真係好實用。依家進入 Data science 年代,人人都幾乎要搞下數據。成日都俾人恐嚇,唔識搞數,好快就會搞你。所以,係呢個仆街世代,好多人都唔想俾人淘汰既情況下,迫於無奈,都會除左 Excel 之外,開始掂下其他相關既 Language ,去提升日常既工作效率(當然唔好以為咁樣可以提早收工。Automate晒所有野然後疊埋雙手炒股,呢個例子,TheOnion 就有!)。依家 Python 都(仲)幾炙手可熱,我地或者亦都一齊好簡單咁樣探討下:如果 Excel 做到既野,用 Python又可以點樣做。首先,簡單介紹咩係Python 同Pandas:Python 係一隻 Programming Language,同舊時大家讀書上電腦堂寫既 Basic Pascal 甚至係之後用到既VBA 以至到更高階既C C# C++ .

NET PHP Perl 等等都係電腦編程。但係唔係IT從業員自己亦都唔敢講太多。而Python 同 R 近呢幾年開始 Hit,主要都係因為呢兩個係做大數據分析(Big Data Analytics)以至人工智能(Artificial Intelligence) 同深度學習 (Deep Learning … Blah blah blah) 比較有優勢。Pandas 就係Python 入面其中一個Package ,你可以當係插件既一種,多數做數據表既管理都會用到佢。簡單講,佢等同係Python 入面發揮 Excel 既功能。Excel 要錢,但 Python 同 Pandas 都係免費。(當然,學點用所花費時既時間成本,就另計)( 鳴謝番置地記者先)Disclaimer以下講既野,其實都好入門,我自己都唔可以話自己識,但都係想玩下深入淺出咁。高階者可以直接飛,仲有,如果有錯或者啲步驟太低能,千祈唔好恥笑我。歡迎高手指正啲更簡單更易明既選項,在下都感激不盡。為左揼下波鐘攝下字數,同華田兄有少少唔同,我地由 Download 個 Table 開始做起,以體驗下依家政府既數據有幾 User-friendly。我地逐步逐步黎。步驟 (1) 去統計處個網頁到搵個 Table Download比我想像中係易搵既。(https://www.

censtatd.

gov.

hk/hkstat/sub/sp210.

jsp?productCode=B1050014)我地照樣 Download 番 Excel Format,因為唔覺見到有 API 呢種 Data handle。步驟 (2) 開一開個表睇下岩唔岩有時成日以自己搞錯 Code,點知原來係 Source file corrupt。所以好習慣係開黎睇睇有無伏先。直接 Double click 開(開唔到?前提梗係你要有 Microsoft Excel 先啦大佬),見到個 Table 係 “T07” 既 Tab。就咁睇唔覺有咩問題。(除左行內人知道Import 呢堆 data 會有少少仆街之外…)步驟 (3) 開 Python,再用 pandas 開始做野之後係任何一個 Python 作業空間,我地 import pandas 呢個 package。筆者用 Jupyter notebook 因為貪方便。當然用其他野都一樣得,在此唔多講。(筆者用緊 Python 3.

x 而唔係 2.

7)import pandas as pd 句野講乜:import pandas 個 package,以後用 pd 呢個簡寫,就召喚到。步驟 (4) 用read_excel 去讀 excel 表然後利用 pandas 既 read_excel 呢個function,將個 Excel spreadsheet導入。Table7 = pd.

read_excel('B10500142018AN18B01.

xlsx', #檔案名 sheet_name='T07', #Tab名 header=None, index_col=None, dtype=None) #見[i]句野講乜:呢度有少少複雜。但其實一步步黎唔難明。目的就係將個表導入去,以後叫 Table7。咁你都要話俾個部機知,你個檔案名同位置係邊(’B10500142018AN18B01.

xlsx’),同埋一個Excel 咁多表,究竟用緊邊張 Tab(’T07')。所以呢兩樣野如果你自己做,一定要按自己目的去改。至於後三個 option我唔打算解太多。除非真係有興趣,我會係最後尾係咁易解下。但係你見咩都 set 晒 None,你都知其實唔駛理咁多。好勒我地照去。睇下個表會變成點:係,你會見到成堆垃圾咁樣。x1係,你會見到成堆垃圾咁樣。x2係,你會見到成堆垃圾咁樣。x3但你部機無壞,到依家一切亦操作正常。不過因為個表本身就整到靚一靚俾人睇,唔係俾機睇(machine readable),所以整左好多空行果啲落去。所以電腦會 assign 左啲 NaN (Not available) 既值俾佢。咁既表,唔好話畫圖,用黎睇都睇唔到。於是我地又要進行一下叫 Data cleaning 既步驟。步驟 (5) 做Minimal 既Data cleansing對於完全無興趣呢一 Part 既人,我建議你就咁貼呢行 code 就算:Table7b = Table7.

replace(' ',np.

NaN).

dropna(thresh=2,axis=0).

dropna(how='all',axis=1).

reset_index() #見[ii] – [iv]句野講乜:最簡單最簡單,我地整個另一個表叫 Table7b。然後換走啲唔應該出現既字元,同埋剷走無用既行。技術野最後再解,總之整完會變成:你心諗:屌!咪好似同岩岩果張一樣?其實你睇真啲就唔係。呢個表你已經見到中間既 Data 集中埋一碌,有數據表既雛型。同埋 NaN 值已經大幅減少。步驟 (6) Filter 番自己想要既幾行數依家我地只係需要撈番想要堆數,就已經成功喇。Pandas 有好多方法去做 filtering,我地最直觀用 iloc:Table7c = Table7b.

iloc[8:13][[2,10,13,16]]句野講乜:iloc 就係index locating (好似係)。第一個方括號係代表要 Call 既 row number,8:13就係8 去到 12(因為13係唔包既,唔好問點解)。至於後一個方括號就係 Call 既column number,即係名叫第2,10,13,16個 column喇。我地將界左出黎既表叫 Table7c。咁就得番咁多喇。步驟 (7) 整色整水搞下 Formatting(但其實唔做都一樣得!樣衰少少姐!我自己懶就成日唔做!)之後我地整番少少整色整水野,set 番好啲 Column 同 Row 既名:Table7c.

columns = ['age group','25th percentile','50th percentile','75 percentile'] Table7c.

set_index('age group',inplace=True) 句野講乜:我相信 Python 有樣野好係,有時啲 Code 簡單到我咩都唔寫,你都大概會估到佢係係度做咩。步驟 (8) 用Seaborn 呢個package 去畫 Heatmap黎到呢度,我地就可以用另一個叫 Seaborn 既畫圖package 黎整個 heatmap喇。import seaborn as sbsb.

heatmap(Table7c.

astype('int'), annot=True, fmt="d", cmap="YlGnBu") 見[v]句野講乜:就係畫張 Heatmap。中間仔細既野,留番最後再講。完成!!好勒,大家得閒應該都試下用。複雜就可能會有少少複雜左,但係Code 可以回收作無限次使用,而且當你要plot 100, 1000, 10000 張 heatmap 果時候,你就會發現 Coding 既好處。以後都會試乎時間(同自己既能力)再向同大家介紹一下處理 Data 既心得。附錄:扮高深既技術補充以下係想深入少少講番頭先用過既一啲 Syntaxi/ pd.

read_excel如果個表唔係咁樣衰,你可以直接叫pandas 去認邊條column 同 row 唔係裝數,但係裝住 identifier。呢度既例子就係 income percentile (分別係25th, 50th, 75th)同埋 age group。但係因為個表垃圾,一開始叫pandas 認係徙氣,所以索性用 None,pandas 就唔會幫你認。所以要之後先自己define。dtype 係用黎定義數據係咩數據類型。數據都可以好多種,有啲係整數,有啲係小數,有啲係日期。同樣,如果你個表本身靚靚仔仔,pandas 會幫你認得幾好,但係如果一堆垃圾既話,都係set None 慢慢自己執番好啲。ii/ df.

replace(*df=dataframe,即係個datatable既名,例如以上例子 table7)統計處既表除左空行電腦會自動換成 NaN之外,佢仲有一啲表面睇落係無野但實質打左空格,即係一個「 」。人眼睇落無野,但係電腦唔可以容許呢啲事發生,因為突然有個格仔多左粒唔係數既野,佢會計唔到。所以呢個指令,係希望將入面既文字空格都轉埋做 NaN,方便之後剷無用既行iii/ df.

dropna顧名思義係用黎drop有NaN既數據行/列。入面既 how 係代表你想叫電腦點移除。如果係 how=’any’ 則只要有一個cell 有 NaN 就即剷。相反如果係’all’就要全部都係 NaN 先剷。至於thresh 就係中間路線,自行設定要有幾多NaN 以上先剷得。上面做左兩次,一次係 axis =0,一次係 axis=1,即係行同列都掃一次,清晒啲無用行數為止。iv/ df.

reset_index其實可以唔reset 只不過reset 左之後 row number 就會順住排,係做iloc 就解說會容易啲。v/sb.

heatmap第一個parameter: Table7c.

astype(‘int’),將Table7所有數定義格式係integer。呢個步驟重要係因為之前read_excel set 左dtype = none。如果唔執番,有可能會出 error。第二個parameter: annot=True,要出現番堆工資數字係heatmap上面第三個parameter: fmt=”d”,堆工資既格式,要出番整數出黎。第四個parameter: cmap=”YlGnBu”,揀heatmap 顏色。鍾意可以去seaborn 網頁慢愎揀。我諗大抵上係咁。如果大家有咩問題可以留言,亦都可以互相切磋下,因為我自己其實都係唔係好識……Inspired by:Excel 閑談 — 善用 Heat Map 成製圖高手有時候無圖更勝有圖呢medium.

comFurther update in 3 April 2019:感激 Eric 兄亦都加入與文會友行列為我地示範點樣用 R 整 Heatmap!¾ 技術文 — 用 R 整 Heat Map簡單示範以 R ggplot2 製用 Heat Map (附原始碼)medium.

com.

. More details

Leave a Reply