2014/7/2

我認為的資料科學家作業流程

之前有幾次機會到不同場合分享 Excel 在實務上應用,不過當時的標題大致上都是「樞紐分析」「資料分析」,感覺上就是不夠大器。
上網找了一下,原來當年針對 Data Mining 這個主題就有人提出了的作業流程:CRIPS-DM
我覺得定義的還蠻完整的,也符合實務上遇到的狀況,更重要的是它將Business Understanding 與 Deployment 也納入,就是要提醒玩弄資料的工程師,千萬不要只將眼界完全專注在單一課題(例如:新演算法的開發),而是要對實際商業環境做出價值。好比你是個管理顧問,接到了個賣牛肉麵的案子,那設法將牛肉麵多賣出個幾千碗就是你的價值所在;總不能資料分析到最後:成年男性牛肉麵吃的比較多
File:CRISP-DM Process Diagram.png

上圖引用自 wikipedia
可以看到主要分為6大階段

Business Understanding
Data Understanding
Data Preparation
Modeling
Evaluation
Deployment
我自己的記憶理解方式如下:
以某校新到任教師為例,各階段對應狀況如下:
(1)Business Understanding
學生們的學習狀況為何? 要做些什麼來協助提高低學習意願學生的動機?
(2)Data Understanding
蒐集那些資料可以協助瞭解這個問題? 筆試成績、家長背景、學生姓別、年齡、居住地、國籍、經濟狀況 ?
資料想要蒐集得愈多,成本會愈高哦

(3)Data Preparation
蒐集資料的過程中,有些資料可以直接計算得到。例如:只要知道出生年月日,自然可推算年齡;
但同樣填寫小康,有人是住在大安精華區,有人是在荒山野嶺...是否有其他方式提供資料的正確性?
(4)Modeling
決定要採用那些分析技術→繪製直方圖、敘述統計、差異分析、學習狀況分類
(5)Evaluation
評估→此例中只是一個教師想要執行的專案,以目前電腦的計算能力,不太有評估的需要...但如果是整個國家的資料,則選用的分析模型是否合宜就楚重要
(6)Deployment
因材施教? 改變教室經營方式? 改變家長心態? 改變筆試頻率?
我想在教育機構,重視的應該是第(4)項:Modeling;
所謂的統計學、計算機概論、機器學習、程式寫作,都可以視為是這塊...
不過其實在實務上,有些項目還真的不好畫分
比方說在 Big Data 時代,很多資料並不像是當年在喊 Data Mining 時資料是由廠商自行蒐集而來的結構化資料,現在有很多資料是屬於非結性構資料;所以說啦,Big Data是個強調混搭的時代
只要有心的話,廠商也可以設定一個 Facebook 粉絲頁;或是廠商可以利用程式監控敵對企業專利申請的狀況...再簡單一點,賣冰啤酒的廠商可以取得氣象預報的各項資料來研擬各種行銷策略
我把以上的流程,再和The input-process-output (IPO) model 結合如下:
Moe
資料科學家作業流程
CRIPS-DM IPO 對應技術分類
(個人意見)
Ⅰ-定義問題 Business Understanding Input 產業分析
商業知識/邏輯
Ⅱ-取得資料 Data Preparation + Data Preparation Input Databse System
Information retrieval systems
Ⅲ-模型分析 Modeling + Evaluation Process 統計學
機器學習
Social Network Anaysis
Ⅳ-行動應對 Deployment Output Visualization

這樣的畫分一定有很多爭議…
好比 Social Network Anaysis 中也會有大量的Visualization(視覺化)技術啊…不過我想在學習的過程中,這對於方向感的建立是相同重要的,所以我還是會將視覺化技術給獨立化出來。而實務上的確也會有那種面對複雜的問題,無法判斷各種指標的權重應該如何決定時,將所有資訊轉化成一張圖形就決定的狀況發生…
如果本網站是一本書的話,那我想這篇文章的重要性就如何目錄吧 微笑
備註:
資料科學家(data scientis)是 Big data 炒得火熱之後出來的新名詞;
最簡單的定義就是,資料科學家的統計學比程式工程師好,資料科學家的程式能力比統計學家好…

2014/5/16

在 PTVS 底下使用 IPython

PTVS 指的就是微軟 Visual Studio 底下的Python開發環境,只是微軟喜歡再搞個簡寫,證明他們為了這個東西有弄出一個專案;

而IPython是Python底下一個很出的 IDE ,後來上網查原來 REPL 是有特殊意義在的 ,維基的說明如下

「讀取-求值-輸出」循環(英語:Read-Eval-Print Loop,簡稱REPL)是一個簡單的,互動式的編程環境。這個詞常常用於指代一個Lisp的互動式開發環境,但也能指代命令行的模式和例如 APL, BASIC, Clojure, F#, Haskell, J, Julia, Perl, PHP, Prolog, Python, R, Ruby,Scala, Smalltalk, Standard ML, Tcl, Javascript 這樣的程式語言所擁有的類似的編程環境。這也被稱做互動式頂層構件(interactive toplevel)

而在 PTVS 使用 IPython 其實也蠻簡單的,只要看底下這篇文章就可以

Using the IPython REPL with PTVS

但我還是將個人心得說明如下

在 Visual Studio 2013 中,你可以裝好幾個 Python 的編譯器,例如像我就裝了:

image

其實我不是要展現我個人任重道遠,而是常常會發生一些奇怪的狀況最終就變成了這種情形;

我來說一下我目前主要的心得,我不知道微軟用了什麼機制去區分 Python 32 bit 與 64 bit版本,因為就我個人的狀況是2套都有裝,而在套件上,有些套件是 32bit 有些又是64bit ,所以如果你是用32 bit的Python 但是配上 64 bit的套件光是在 import 階段就會出現問題….

但是好在 Visual Studio 可以隨時切換你要的編譯器,因為我把 IPython 要安裝的套件下載成 64bit 但是安裝在 32 bit 的Python 資料夾中,但是只要我選擇 64 bit 的Python 編譯器就不會出現問題….

另外在 Using the IPython REPL with PTVS 的連結中,有建議直接下載 SicPy 編譯好的 exe 套件,就直接依他的指令下載回來安裝吧;因為Python的套件,很多都有相依性,就好像你要去參加婚禮一樣,要穿的服裝都要照一件的規定來….而這種編譯好的套件,就好像直接像禮服公司拿衣服,減少了很多相依性上的麻煩

最終安裝好了,再記得到 Visual Studio 中將互動介面改為 Ipython這樣子就比原先純文字型的互動模式更加棒了

另外這個套件中,有提供在互動介面中就直接輸出圖形的能力

image

我覺得這真的是很棒的功能

可以多試試看,畢竟 Python 在科學運算上因為資料結構可以實作很多在 R 中不容易實現的功能,可以多加利用一下

另外 IPython 另一個重要的功能就是可以轉成網頁編寫 Python 的平台(即為:IPython Notebook),我只能說因為少了微軟的加持再加上還有眾多網路系統設定要調整,我決定等到以後買了 Mac 與工作中確實有此需求才會進行實作…

Python 的 BeautifulSoup4 在Visual Studio 2013異常處理方式??

先說結論:

不要理它,但是要確實的告訴 visulal studio 2013 不要理它

如下,在例外狀況將 python 的選項給取消…

image

 

 

開始說故事時間囉:

在資料蒐集階段中,我們常會借助 Python 來進行網頁資料系統性的取得

因為 Python 有提供蠻多這類相關的套件

只要在google 上面打入 “web scraping” python 等相關字樣就會出現很多的結果;BeautifulSoup 算是其中蠻出名的一套,雖然後續有後起之秀

不過這套最大的好處是容易安裝,我有測試過另外一套,因為相依的套件太多了,所以一直無法安裝成功,但這一套就簡單多了

我想為了後續 open source 體系的編程學程之路,6月後就會開始進行新一輪的mac book 物色了… 因為很多 open source 的東西都是基於 linux 系統,移植到windows的時候總是會漏東漏西的,否則就是相依性的問題一直搞不太起來

像是 BeautifulSoup 我在Visual Studio 2013的環境中執行程式碼時就會一直報錯,後來是找到這一篇

Can't import bs4

image

嗯,說穿了就是一個一直解不掉的Bug … 因為其他的套件就不會有這樣的情形….

好吧,至少這個狀況是能被處理的

在此做個紀錄

另外其實還在微軟體系下的朋友,visual studio 2013提供的程式環境是真的還不錯用…可以到 http://pytools.codeplex.com/ 下載最新版本進行安裝

它提供了不同版號的 visaul studio 的安裝檔

2014/5/1

Visual Studio搭配Azure發行網站

我很喜歡Azure的一點就是,他簡化了很多學習網站架設的功夫

如果是之前的話,你要架設 .Net 架構的網站,要花蠻多功夫的,而我個人又不太喜歡為了一個小專案還在那邊安裝 SQL Server 管理工具…

現在Visula Studio 2013可以很方便的和Azure相結合;我紀錄一下我自己的心得

(1)新增Web Forms專案 -- 可以看到已經與 Azure 做了整合

image

(2)在Visual Studio中設定資料庫連結

image

在Azure中的概念,是同一個使用者擁有一個相同的資料庫伺服器

而你每建一個新的網頁服務就可以同時指定一個新的資料庫,簡單的說在Azure中的階層觀念大概是這樣

資料 >> 資料表 >> 資料庫 >> 資料伺服器;雲端的好處就是微軟負責將資料伺服器的正常營運,我們只需要著重在資料報表如何呈現的邏輯即可。

另外要注意的就是,由本機端的資料庫轉換成可以匯入Azure資料庫不能直接轉換,還需要透過 SQL Azure Migration Wizard 進行移轉…

(3)依照正常的開發流程,就可以 建置 → 發行網站

我採用的是懶人法,其實微軟有提供多樣化更新網站的方式;如果你願意的話,也可以採用最傳統的 ftp 上傳方式

image

這裡記得要設定資料庫連結,Visual studio還沒有聰明知道要指向那一個(因為我連線的是遠端資料庫)

image

網頁程式的開發,我覺得對於資料科學是相當重要的一環。因為你的分析演算法再如何的漂亮,最後還是需要呈現讓其他人能夠理解你說的故事是什麼?而網頁就算是一種最通用的呈現方式 (另一種方式則為 Excel 試算表)

2014/4/30

C#捉取網頁資料-其一

在C#建一個簡單的Console專案

然後安裝以下套件                   

image

image

image

語法上其實還蠻單純的

不過在建立新物件時,因為會用到套件的東西所以需要自己手動指定解析,IWebDriver 與 PhantomJSDriver(),將游標移至這2個項目旁邊按右鍵即可

image

此處一個簡短範例如下

            IWebDriver driver = new PhantomJSDriver();
var url = "http://en.wikipedia.org/wiki/Web_scraping";
driver.Navigate().GoToUrl(url);
var tocElements = driver.FindElements(By.CssSelector(".toctext"));



在我這個範例中,最重要的是那個 FindElements有s與沒有s …顧名思義,有s指的是複數的狀況,沒有s指的是單數的狀況;而在CssSelector中的參數要如何取得呢? 簡單就使用Firefox中的FireBug+FirePath即可


image


另外一個小技巧就是在C#的程式中設定適當的中斷點,然後利用「即時運算視窗」再確認我們捉下來的資料是不是我們需要的


因為有時候需要的文字資料裡面會有不需要的東西,則可以事先運用文字相關函數加以整理….