2-5:資料處理視覺化
我們在分析資料的時候,如果數據整理的結果能用圖形表示,不但可以讓一般讀者快速抓住問題重點,也可以讓有經驗的人看出其中的技術細節。
早期這方面的相關軟體,最具代表性的就是Matlab,Matrix Laboratory。它第一版是用FORTRAN編寫,著重在矩陣向量的運算,第二版改以C語言開發,加入了資料圖形視覺化的功能。
時至今日,由於大數據和人工智慧的需求,Python裡面Matplotlib.pyplot繪圖模組,結合其Pandas資料處理能力,和Numpy的陣列運算功能,形成一套很有效率的深度學習組合。
上圖上第2行匯入繪圖模組並改命名為plt,第3行讀入csv檔案後,在第4行取其中”CPM”欄位值和”CTR”欄位值,分設為x座標和y座標,繪製出上圖中之2D散佈圖。可以看得出來,搭配第1行匯入的pandas模組,整欄資料的取用計算變得非常簡便。
下圖是取用所有6個欄位的資料值,繪製出3D散佈圖。這3D圖不僅能顯示3個座標軸,還可引用另外3個變數,顯示出總共6種不同資料訊息。
第15行中,除了x,y,z等3軸座標外,還用顏色來分類”CLASS”這個欄位,而且使用數據點的大小,來顯示”ROAS”這個欄位值的多寡。甚至,還可以把”公司名”這個欄位內容,用第16、17行的敘述直接標記在數據點旁邊。
如果只比較繪圖精美的程度,Matlab因為發展既久,明顯勝過Matplotlib,但兩者處理的對象和數學的觀念,並不完全一致。
Matlab的Matrix(矩陣),主要針對科學工程可以量測的物理量,如時間、位置、頻率、強度等,做變化趨勢的計算,而Matplotlib很多是在做數據分佈的統計分析。
兩者在數學上的觀念差異,從使用的符號也可看得出來。Matlab所強調的矩陣著重在2、3維變數,很難擴充至4維以上;但Matplotlib卻很容易從陣列(Numpy Array)的操作,視需要增減它的維度。
模組搭配Python程式語言運作,在實務上比較佔優勢。Matlab因為是C語言的API,不是直接撰寫C/C++語言,在影像視訊類的第一線工作場所,有時不為基層主管所喜。
圖2-5-3. Matlab的繪圖顯示相當精美。
前面提到的FORTRAN語言,那是五年級前段班生的共同記憶。當時個人電腦並不普遍,電腦實習課都需要輸入程式至大型主機,進行分批次處理作業,再靜待編譯結果。所以不時可看到電腦教室終端機前,一群人在那裏慌慌張張、手忙腳亂,在有限時間壓力下,匆匆輸入錯誤指令。但這夢魘不會馬上終止,你還必須過一個禮拜等報表出來之後,再繼續輸入指令、然後繼續錯誤…….。
聽說早期的情況還更慘,學生是用卡片打孔方式輸入程式,有時卡片打錯了,還會有人用膠帶把打錯的孔貼起來,實行「掩耳盜鈴」政策,讓計算機老師相當頭疼,不知道該不該責備這些天真浪漫的學生。
圖2-5-4. 整張卡片代表一個指令敘述,每一行代表一個字元,最多可輸入80個字元。黑色的小框,是被打孔的位置。
圖2-5-5. 1963年,一部IBM打孔機電腦,用牛車搬運至台北羅斯福路,一路穩步向前,被戲稱為”mobile computing”的先驅。