Posts

Showing posts from May, 2017

Anaconda - 給見習分析師的就職禮物

Image
正所謂工欲善其事,必先利其器。要作好的分析,你一定要準備好和了解你的工具。 有一群Data Scientist開始意識到無論傳統或是新的工具實在太多和太複雜,也不想再局限於只有SpreadSheet的世界,讓更多並非Software Engineer, Programmer出身的人增值自己,從數據中發現和分析他們一直好奇的事物,甚至解決業務和工程上的問題,而又不必是一個Software Experts或者Engineer,於是,這群人便創立了Anaconda Cloud。 為何筆者會介紹他們,不是因為收了稿費,而是這個團隊出產的Anaconda,是一個由Python支援的Open Data Science Platform,這個平台正正讓筆者受惠不少,筆者在早一兩年前,舊公司電腦的操作系統是Window,在安裝或導入一些Package遇到不少的問題,到現在服務的公司對軟件安裝亦有所限制,安裝Package的時候,也要做了不少手腳才可完成。最近得知這個Anaconda,讓我在幾分鐘內,便準備好我所需的工具,還記得筆者當年要花幾天的時間來弄好那些煩人的設定。相信有用過Python的讀者們都會經歷過這些痛苦,不過現在現在進場的人,因為Anaconda已為我們準備好上戰場用的武器。 想下載的朋友們,在他們的官方網站( https://www.continuum.io/downloads )根據你的Operating System,選擇合適的安裝檔來安裝Anaconda吧!我會建議各位安裝Python 3.6,因為Python 2.7快沒有Support了。途中它會問你想為個人還是所有用戶安裝,只要選"Just Me"就可以了。 完成後,你會看到很多很熟識的工具,也可能你看到的只是陌生的Logo,不要緊,我會介紹常用而實用給各位們。想安裝Package的朋友,不用擔心,因為它已經內置了所有常用的Package: NumPy , SciPy, Pandas , Scikit-Learn , NLTK, R-essentials等等,連筆者最近用來Build Dashboard的Flask也有,所以它真是初心者的恩物,為你提供整合了的資源,直接投入生產。 首先,Anaconda Cloud是一個官網的Shortcut,有...

經驗之談 - 教你如何驗證結果 (Check數)

Image
當筆者在以前和到今天的工作中,處理過不少的Report,無論在Excel,網頁的,在製作的方式和介面會有些少不同,但在數學上和經驗上都是共通的。有時候筆者都很迷惘,到底自己做的結果到底是否正確,尤其已經把整個過程自動化,反而會令自己忘記某些的Special Handling或更detail level的設定,就算記得的話,也不可能每一條記錄都跑去做驗證,這太浪費人力物力了。那麼應該用什麼的方法去做Checking呢?我會有這樣的看法: 就算當下以為自己的方法是對的,但最後的結果可能並不是你想像中的。 《賭場風雲》電視截圖 Back to the Basic,我們做一個報表的時候是先由一組的Records開始,例如每月交易的記錄,都是由買家和賣家雙方交易的資料所紀錄下來,而Report中的當月的交易量,其實是由所有的交易量的總和。只要把所有的交易量加起來,看看跟答案是否一致,別看不起這個驗證方法,因為有時你把交易量加起來不一就是Report的總數,因為建立一個報表可以涉及複雜的程式運算,尤其是那個報表不是由自己Build的工具Generate出離,當你根本不知道裡面的程式搞什麼鬼的時侯,這個驗證方法往往讓你能了解該程式的運作。 而現實中,一個量值可以包含多個維度(Dimension),即是交易量也可以有兩個維度,也可以N個,視乎你的數據有多少的維度。假設我們的數據只包括交易量和業務種類,而業務範圍包括黃,賭,毒三種 (免責聲明:本文並非宣傳任何不良的意識) 。一個非常簡單的問題:如果計算總交易量?很明顯就是把黃,賭,毒的交易量加起來完事了。對,但是如果加起來發現跟總交易量不同的話,那是什麼玩意了?你可能會覺得不可能發生,但現實上偏偏出現在一些Mapping不完整的問題,很多時候我們有的數據的資訊未必足夠,例如在交易記錄中,若果沒有業務種類的話,我們只有從業務活動中,推敲出那是什麼的業務總類,只需要一個Mapping的Table(看下表)便能達到這個目的。 業務種類 業務活動 黃 妓院 賭 百家樂 賭 麻雀 毒 白粉 毒 大麻 回到剛才的問題,為何加起來的交易量,原...

Decision Tree - 充滿規則的算法

Image
Decision Tree(決策樹)故名思義,用樹的圖樣去表達數個規則,根據那些規則來決定那些的結果,很多時候我們會把自己所考慮的因素決定,在腦裡建立一個決策的樹,當筆者在決定買一樣東西時,就例如近期很紅的Switch,會先考慮一下,自己是否真的需要和價錢這兩個決定性的誘因,那我就把自己的想法以決策樹表達出來之後,最後的決定還是先別進坑。 你可能會問這跟Machine Learning或者Data Mining有何關係,關係就大了,在這些課題上,會研究如何讓這棵決策樹由最開始的根(root node),和自我生長成樹(tree node)和葉(Left node)。只要換上一幅較為有系統和正經的決策樹,就能知道這棵樹的結構,第一層的決定性的是對該貨品的需要性,如果真的需要的話,都不用考慮價錢了,所以到了第一層便停了。若果是不需要的活,倒是會看看價錢,便宜的話用作送禮也是不錯的選擇,貴的當然就不買了。其實這決策樹是由我的平日消費習慣而建立出來,也即是從每一次的消費行為中發掘這個決䇿模式,來決定會否大出血。 來到機器學習,Decision Tree亦一樣藉由學習已知的一組數據來學習和生長,其學習原理是把每一個特質(attribute)用作分成兩組數據,看看那一個特質會造成最大的Information Gain,從而決定利用該特質去作為分枝,也即是規則。這聽起來很抽象,回到剛才的例子,假設筆者有二十項購物紀錄,其中有12項是買了,8項的則是沒有買下來,所以在沒有任何機器或者資訊幫助之下,隨機地估計筆者會否買一件產品($P(buy)$),概率為$12/20 = 0.6$,反之,沒有買的則是$8/20 = 1 - 0.6 = 0.4$。大家可以想像到只有約一半的機會能猜中,所以我們要想辦法的提高這個機率,才能準確地預測。原來筆者凡是一共8件是需要的,其中7件會買,1件會放棄;而12件不需要的,其中5件被買下,7件放棄。來到這裡,已知筆者需要某產品,買下的機會, $P(buy | needed)$會變成$7/8$;已知筆者不需要某產品,買下的機會, $P(buy | not.needed)$則是$5/12$。我們可以觀察到凡是有需要的物品,筆者很大機會就會把大買下來,因些借由"需要"這個因素(特質),我們便能得到十分高...

R - 統計分析起家的軟件

Image
從前到現在,學術界最常用的統計軟件除了SPSS就是R,它之所以受歡迎,比其他程式語言,因為其結構簡單,相對容易掌握,對於一個非程式背景出身的統計學家,把心思放在數學理論,新的演算法上,多過放在程式和系統設計,R是一個非常好的選擇,雖然沒有介面,但當你想寫一些自己獨有的分析流程,你會寧願不會要 UI,反而想寫Code去達到自己的目的,這也是筆者為何喜歡Programming,花更多時間在Coding,可讓從你無盡的Routine救起。 至於筆者為何會學習R,因為多一把利器在這社會生存,R在Data Visualization會比較方便,做一些Ad hoc Analysis,可以更快的獲得結果,然後Present結果。再加上自己學校所教的是R,為了碩士順利畢業,學多一樣新的Programming也是無可避免。 安裝: 從官方網站和根據你的作業系統(OS)下載適合的安裝檔: https://cran.r-project.org/ 然後你可以打開R Console開始編寫自己的R的Coding了! Data Type 對於初心者,最好還是先多了解R的資料種類,這樣才會讓你打好根基,在之後任何的分析Routines得心應手。在R的世界,最常用或者筆者會用上的Data Type,有四大種類:Vectors, Matrix, Data Frame, Factors,基本上學會這幾個就夠了。 R中的Vectors可以當成C的Array,Python的List,都是用來儲存每一個Element,而Element可以是一組數字,文字,Boolean,不能是混合的!只需要用c()就可以宣告一個新的Vectors。 a <- c(1, 4, 2, 1) b <- c('I', 'am', 'Horace') c <- c('a', 'b', 3)  # 3這個element會自動變成文字 d <- c(TRUE, FALSE) length(a)    # 找出a有多少個element cbind(b, b)   # 把兩組Vectors用Column合成一個Matrix         b       ...

Python OR R ? 初學者的一個疑問

這個問題早一兩年前已經非常流行,因為當時很多新手(包括一兩年前)想學習有關數據分析的軟件,當時R和Python都剛好冒起和被廣泛討論,甚至拿來作比較,筆者當時認為沒有必要比較,因為到今時今日我的答案都是一樣:這兩種程式語言我也會學。 同樣地是Open Source的軟件,亦同樣能做很多分析的工作,R的出身為統計軟件,Python是從Software development開始,但是因為Python和R用家不停地為各自的Library貢獻,本來沒有統計分析程式的Python,到現在什麼Pandas, Numpy, Scikit-Learn的Package也發展得愈趨純熟,統計分析,機器學習建模通通可以;而R變到現在也能進得Http Request和ODBC,所以無需擔心功能未必能滿足到自己的需求,因為兩者絕對有能力勝任,差在那一個程式用起來會比較方便。 網上亦很多專業的分析: 這篇以數據分析和性能方面來評論,內容比較Technical,提出python在data visualization表現相對遜息,並不如R的好。性能方面,由於R為統計分析變得容易,容易忽略性能表現,因而運行的時間多了。 http://www.bigdatafinance.tw/index.php/tech/methodology/193-r-python 這個來自Quora的討論,主要在功能上的角度作比較,提出Python或R會表現較好,R會有更多統計上的Library支持,用作分析和Visualization上相對較好;而Python,在發展分析工具如Dashboard, Web Service,以及近期流行的人工智能和深度學習,會有較多的支持: https://www.quora.com/Which-is-better-for-data-analysis-R-or-Python 對於新手,不應貪心,進場應該選擇其中一個工具,至於是那個那就得看看你自己主要想用來做點什麼,由於筆者自己要做不同的數據分析,甚至要把結果可視化present出來,所以R更適合。除此之外,亦需要開發工具和Dashboard來作分析,機器學習來預測分類,所以Python在這方便會給我更多支持。所以,這兩種語言都對我非常重要,學習之後就書到用時也不會方恨少。