2013年1月17日 星期四

資料處理的技巧(Skills Of Data Mining)


自從接手了各式不同的工作之後,畢竟時間是有限的,勢必會壓縮到某些原本關注的內容,但是對於很多事情的處理方式,仍舊是充滿興趣,尤其是當自己開始經手各式各樣不同的需求及解決方案之後,漸漸地就會發覺一件事:「雖然人工(工人?)智慧可以解決大多數的問題,但是以現今的時空背景之下,空有資料、數據,基本上並不能幫你看見契機(危機),甚至對於某些人來說,反而就會變成裹足不前的藉口。」

此話怎說呢?基本上資料的處理方式有很多種,最常見的就是進、出而已,對於某些分工更細的體系來說,甚至只有進或出,不過當資料累積到一定數量或者它是屬於那種會自然成長的資料(log、進銷存資料......等),這時候對於大多數的公司來說,就會開始採購軟體(用Excel也算)或各式系統(例:ERPCRM...等)來進行管理與整合,希望能夠透過它,協助人們來快速地整合某些已知型態的資料內容。

但是問題往往沒這麼單純,如果你想得到未知的資料型態呢?你會怎麼做?

你會選擇花錢買另一種系統?請廠商(每年支付金額不算少的維護費用)或養人來客制開發(是否合乎成本)?其實不管是那一種解決方式,除非採用同一套系統囊括所有資料流,不然,最終還是會碰見一種問題:「資料整合的困難」,縱使如此,你仍有可能會遭遇到某些系統無法彈性解決的部分,這時候若回歸最初問題的根源,執行者對於自己手上資料的處理型態和能否快速地找出那些有用的資料,就會成為整個流程是否能夠順暢進行的關鍵。

當然,有人或許會說:「如果每個人都會這些技巧的話,那要某某某技術人員(部門)做什麼呢?」,當然,話雖如此沒錯,但是換個角度來思考,如果你能夠讓自己具備相關技能,絕非是用來打壓他人的工作內容,主要是用來提升自己的競爭力,雖然其好處並非是顯而易見(通常還會導致「能者多勞」的結果),但是,最終選擇的主導權還是掌握在自己手中,端看每個人怎麼看待而已囉!

接著我們就來進入正題吧!究竟在資料處理上,應該具備那些認知和技巧呢?當然,我相信應該每個人都有自己的習慣(手法),甚至有些單位擁有所謂的整體解決方案(所費不貲),不過,照慣例,這邊主要還是針對一般個人或是特定需求來討論,畢竟對於具備有錢好辦事的解決方案來說,往往也不太需要尋求其它解決方案,當然也不會看到這篇的內容了吧?(笑)

1.善用手邊的軟體:

這一點說起來容易,用起來對於每個人來說的難度都大不相同,就連一般辦公使用的Office相關軟體來說,我相信對於許多人來說,都只是拿它做為"單一"用途的工具,甚至連它10%的功能都沒有用到,因此,最簡單的就是從善用這些軟體開始。

以Excel為例,我相信一般人至少對於Excel的計算機功能是沒有問題的才對(如果有問題的話,可能也不太需要安裝它了......)但是在資料處理上,我覺得最基本應該要瞭解的功能有「儲存格格式排序篩選數字進退位的計算Round、Roundup和Rounddown)、比對資料的函數Lookup、VlookupHlookup)或其它特定函數(依不同需求而定)」。

其實為什麼會以Excel為例呢?因為對於大多數的使用者來說,它就是一個相對熟悉的軟體,同時,也能夠在官網上找到許多教學及範例文件,只要留意某些功能在新舊版本上的差異即可。

另外一方面,主要是因為許多套裝(開放)軟體,至少都會提供資料l匯出的功能(csv、xls或xlsx檔),通常匯出的資料也大多能夠被Excel所接受,因此,你能夠活用它所提供的功能,相信你對於資料處理上,一定馬上就能夠得心應手,唯一無法偷工減料的就是原始資料的取得(建立),這部分可能就不是在這邊要探討的主要內容。

2.學習必要的指令或程式語法:

如果你手上取得的資料,並沒有經過正規化的整理時,又該怎麼要來處理資料呢?這時候可能就是更為進階一點的資料處理方式,不過對於ITMIS來說,漸漸地會成為必要的能力之一,因為我們要面對的資料,通常已經經過正規化處理的是少之又少。

這時候可能就得要借助某些工具或語法才能夠協助我們來處理這一類的資料,況且這類的資料量往往也是相當龐大(例:系統相關的Log檔、不同格式轉換後的文字檔),每次遇到這類狀況時,經常就會陷入天人交戰,究竟是要土法煉鋼硬把資料一筆筆找出來?還是要去尋求其它的解決方案來進行資料剖析?

雖然,該選用何種方案沒有一定正確的答案(視輕重緩急而有不同),但是對於個人能力的培養上,還是建議能夠自行處理這類棘手的狀況,除非你像這篇報導裡的這位仁兄一樣,有三頭六臂的外包能力。

其實透過不同的工具和語法,對於資料的剖析會有不同做法,不過還是建議能夠具備下列的能力:

  • 正規表式Regular Expression)的撰寫能力:
    因為正規表式是大多數工具能夠接受的描述方式,如果能夠自行撰寫正規表式,就能夠透過時下許多文字編輯器或軟體,進行資料篩選及整合的工作。
  •  學習或瞭解至少一種指令或程式語法:
    這部分依每個人的能力及喜好而定,你可以透過各式系統本身所提供的指令(例:Linux的find、grepawksed),或者是特定語言  (例:VB、PHP、PYTHON)來進行相關資料的篩選和判斷,畢竟工具何其多,只要選擇自己適合的即可。
  •  自動化的建立:
    因為這種非正規型態的資料,往往會隨著時間而大量增加,或是在整個流程中會不斷地產生類似的資料流,因此將資料整合的工作進行自動化的建立,也是相當重要的一件事,至於如何建立?

    就得視不同系統和原始資料的取得方式有關,這一點主要就是考驗你對整個系統及資料的瞭解程度,當然也可以透過系統本身所具備的功能來協助,例:Windows下的 at 或是Linux下的crontab均可。
雖然在學習語法或程式的門檻較高,但是對於很多資料的整合及收集來說,著實能夠提供不小的幫助,若是再加上某些工具軟體資料型態的瞭解,原則上幾乎沒有不能整合的資料,除非是這些資料從一開始就毫無章法可言。

若是如此,該思考的就不是怎麼進行這些資料的處理,而是為什麼會得到這種類型的資料?甚至是這類資料是否還有留存的價值?這往往跟架構或原始資料的取得方式有關。

總結:

其實,在資料處理的技巧有相當多,絕對不只上述所說的方式,不過在進行資料處理之前,可能得要先瞭解究竟什麼樣的資料對自己來說是有用的,否則只是白白地浪費時間再進行資料的處理及剖析,另外也該學習應該怎麼樣透過資料的整合來協助上位者進行判斷。

畢竟在這個資訊快速流通的時代,怎麼樣縮短既有流程的時效,往往也是提升競爭力的不二法門,如果沒有辦法快速地將收集到的資料轉為有用的資訊,光是內耗往往就會造成許多不必要的浪費跟困擾,因此,對於資料處理的認知與基本技巧,我想,應該是寧可多也絕不能沒有的基礎能力之一。

無論是公或私領域,如何將自己得到的資料做有效的整理,這都是會決定下一步該如何進行的重要依據,在抱怨和責怪別人之前,請先捫心自問想想,自己究竟做了多少呢?