2013年11月3日 星期日

Umbraco的Tag實作

現在網頁流行使用Tag,標籤。
在Umbraco中使用標籤的技術只要搞懂了就很簡單。一開始,倒是花了不少時間在測試。
幾個觀念得先記下來。
  1. Tags資料型態:Umbraco 有提供預設資料型態。但不建議直接使用,除非你整個網站都是用相同的標籤系統。例如說,部落格有自己的標籤,FAQ要有自己的標籤,那就得個別建自定資料型態。
  2. Tag group:延續前面,如果要有個別的標籤系統,那就分別為其定義群組名稱。注意,這個在程式時很重要。
在資料型態定義的地方完成上述工作後。接著當然是定義Document Type,把某個欄位使用這個資料型態。
如果是在backoffice的話,那就可以直接使用了。

如果是程式的話就得小心。其實也很簡單。
要呈現時,就將欄位物件轉成字串,再用spli(',')切開就得到一個一個的tag,接著就是看你要怎麼呈現了。

如果是要新增怎麼辦?
首先就是要搞清楚是用哪一個Tag group。
再來使用
Tag.AddTagsToNode(contentID, Tags, TagGroup)
他的觀念是把tag與content連結在一起。
如果你前台處理時,tags是用,結合的字串,就可以直接使用。

若是要更新的話,我目前作法是有點笨,先移除現在,再新增新的。
移除的話是
Tag.RemoveTagsFromNode(contentID, TagGroup)


當然,Unbraco的Package有一個Tag Manager可以安裝使用,協助你管理Tag。


2013年6月30日 星期日

實驗設計-11

上回提到 ,其實,還有一點小關卡需要再突破一下。

上面的式子講的是母體。
事實上我們進行實驗,隨機抽樣取得數據,我們怎能這麼大膽的說他代表各別水準母體的平均數呢?
所以,我們也只能透過現有收集到的數據資料進行推估。
這部份又是統計一個很重要應用,點估計、區間估計等。依據樣本資料你能多大膽地說母體就是多少。
可是,實驗設計強調的是處理誤差,用來評估你的實踐結果如何,可不可信。

回到主體。
我們對於各別水準也只能用現有的抽樣資料來進行評估。事實上,我們的數學式子只能這麼寫著。

是否還記得,透過誤差來進行相對性比較時,會發生抵消的問題。我們不是改用的平方差嗎?
我們稱之為變異數,是吧。

現在,只不過是改成有個水準下,各別進行了次的隨機抽樣數。用一個式子就把它表達出來。所以,不要開始被這些式子給嚇到了。

(3.1.2)
  

他的意思是說,當我對各水準母體變異數的估計值,其實就是等於各水準樣本變異數。

這別各水準樣本變異數的計算方式,他自己那個水準下,從第1個抽樣數據開始到第n 個,個別去做減去該水準之樣本平均數的平方,再累加起來。然後最後再除以n-1。n是代表我們總共抽了幾個,j是足標,代表目前是指到第幾個。

喔~又回到母體的問題。
整個實驗的誤差估計值,也就可以這樣子表示:
(3.1.4)


還是用資料來表示吧。延續使用上次盒鬚圖所用的資料。



樣本平均數的符號

樣本變異數的符號

    

再改個表達方式。也就是對各別水準母體的估計值。




整體變異數的估計值




另外還有個東西也要順便提一下,就是殘差。本篇一開始講的式子,稍微移動一下。


思考邏輯都一樣,這個是指母體。我們又只能透過樣本來進行估計。
(3.1.5)


這時候,回去看看(3.1.3)與(3.1.4),把它合併起來,並且用(3.1.5)取代,就可以得到下列式子。
(3.1.6)

這算是到目前為止最複雜的式子了。
下表就是加上殘差結果。


現在看到這一推數字,真的先不要太緊張或太在意。之前一直強調,我們是透過隨機抽樣的過程,以取得之樣本資料來推估我們無法一眼看透的母體。需要猜測的母體,可能隱含著某種函數特性,或許他真的是2x+1,只不過他不是老師出的題目,他會明明白白告訴你。而這些都是你遭遇的問題。因為你不是上帝,真的無法篤定說出他背後影藏的函數特性。
既然是猜測、是推估,就會衍生很多你說的對不對的問題,就會衍生出一堆來驗證你對不對的方法。
這些東西總得要有依據、要能計算。而樣本平均數、樣本變異數等,就是最基本的材料了。
由於是實驗的過程,你所關心的因素可能會產生相互影響,這又會觸發一些新的素材出來(目前這部份還沒討論)
後面數學式子會越來越多,越來越抽象。但也希望能一步一步抽絲剝繭。

實驗設計-10

實驗結果模型

數學與統計到底是不是同一件事情。當然不是。就像數學與物理到底是不是同一件事情,是一樣的道理。

數學式子是這樣子表達:
這個式子是說,有一個函數,當我們投入x會得到y。但是,現在這個函數,還沒有告訴你,所以,你不知道要怎麼計算。
如果跟你說
當x=1時,y等於多少?這時候,你應該會說選我選我,因為你知道答案。而且,隨便給你x多少,你都可以回答。
x     y
=====
-2   -3
-1   -1
 0    0
 1    3
 2    5
其實,他是由已知x來取得y。
其實,他就是一條斜率為2,向右平移1的一條直線。
其實,只要有兩點,我們就可以畫出一直線了。

回到統計的觀念。
因為他可以代表所有可能的情形,所以,我們可以稱就是母體。

問題就是這個函數(母體)長什麼樣子我們不知道。他是一個黑盒子。(數學的式子是白盒子)
    
而統計式子是這樣表達:
這個就是誤差。而就是我們要透過樣本資料去推估的母體。
所以,y才是我們的已知,而函數(母體)長什麼樣子我們都不知道,你的x根本英雄無用武之地。
這下子,y不是我們算來的,而是我們在隨機抽樣的過程中,藉由實驗、量測等方式取得之數據。
可能我們收集到的資料就會變成:
   y
====
 -3.1
 -0.9
  0.1
  3.0
  4.7

你可以想像,就好像有一個圖片,當你zoom in(放大時),每個點的距離就可以看得很清楚;當你zoom out(縮小時),每個點的距離就會變小,甚至看起來像一直線。
是得,這就是你可以忍受的誤差範圍。我們的式子
就可以改寫成 

如果,我把每個 都設成0時,不就回到原始數學式子了。可惜,這個 在統計來說是必要之惡。

再拉回簡單的問題。還好,我們的 這個黑盒子,目前不是一條直線。而是向靶紙一樣,只是一中心點而已。
也就是~~~平均數。

這時候我們就開始改用統計的習慣用法吧。假設進行了次隨機抽樣所得之數據,每個觀察數據就可以用下列公式表達。
   
也就是每一個觀察值,就是平均數再加上他自己的誤差。

那如果是單因子分析,假設有個水準(處理別)
各別水準進行了次的隨機抽樣數。 那所有的數據資料就可以這樣式子表達:



現在,看到這樣子的式子應該不會心慌慌吧。

2013年6月29日 星期六

實驗設計-9

之前有提到所謂「單因子」。別想太複雜,他就是你關心的一個題目。
燈有亮沒亮(兩個水準、兩種處理別),對植物成長的影響。
紅燈、黃燈、藍燈(三個水準、三種處理別),對植物成長的影響。

所謂的實驗設計,就是依上述所設定的問題,到底夠不夠完整性、具不具封閉性。
若沒有,妳就得要事先說明自己實驗設計的限制性。要把前提條件講清楚。

燈有沒有亮,兩個水準,「有亮」、「沒亮」。那時間多長呢?受不受日照影響呢?也就是你實驗所設定的環境。如果有另外的因素造成妳的實驗結果不一致性,那你所蒐集的資料就沒有意義。既然沒有意義,就不用浪費時間去搞數學模式了。

假設,妳的實驗環境設計非常完善。在一個密閉無日照的環境中,一個有用燈,一個沒有用燈。有用燈,燈的型號、亮度等等資訊都得收集。
接著,妳的問題就會變成,那~~妳到底要收集什麼資料。
原始問題是要問對植物成長的影響性。好~是什麼植物,要量測什麼數據來當做「成長」的「同義」資料。莖的週長、葉子長度、新發芽葉子,根的長度等等。有感覺了嗎?植物成長是你問題,某某數字就是你的題目。因為,是題目、是數字才能夠計算,才能夠比較。

問題還是沒有解決,因為還不夠嚴謹。
之前提過,所有的量測都會有誤差。我們要努力降低這個誤差,讓我們所收集到的數據資料是真的非常貼近於事實。這樣子我們才有可能下結論,而且是一個可以說服別人的結果。

所以,妳必須多量幾次。如果你只分別各種一棵植物,那是不是要多量幾個地方。有沒有可能,莖只有一個,妳也只能量一次。那就有風險性了。
各別多重幾棵吧,嗯,也許就可以降低量測誤差吧。
可是,妳不能有燈照的種子,與沒有燈照的種子是來自不同的植物,來自不同的購買源,這樣子又產生新的誤差來源。
所謂的隨機抽樣就是要降低這樣子誤差,減少別人對你實驗數據的攻擊。

接著又有問題了,那到底要種幾棵呢?這又是另一個實驗設計的問題。因為受限於資源(時間、經費等)妳不可能把全世界的種子都拿來種,但是,又得確保數據資料足夠,而不會有偏差。
這回到統計的問題,這叫大數法則。理論上,只要我收集的資料夠多,那會產生的誤差,應該會呈現常態分配(像一個倒鐘),可是怎麼才叫做夠多呢?一般來說是需要30筆。
也就是說,妳有兩個水準的話,那建議起碼要各種15盆,這樣子可能會減少資料的偏差(Bias)。

等你妳先解決的這些「問題」的問題後,才能說,我收集到了一堆數據資料,然後應該要用什麼樣的「題目」來得出,我的論點「有照」與「沒照」對於植物的成長有顯著的影響。


先聊到這,因為,接著會進入數學領域中。若沒做好心理建設,我想會放棄的人比較多吧。

2013年6月26日 星期三

實驗設計-8

假設我們有一個「題目」,請繪製下列數據之盒鬚圖。


應該不用解釋了吧。
那接著問說,哪一個比較好呢?

千萬別急著回答。要先回答,你的「問題」是什麼。

是的!!
「問題」不等於「題目」。

學校老師不斷地出題目給你解,卻沒有告訴你,當你遇到問題時,該用哪一種題目型態來解。

你先想想,你學到的「題目」,就當做是你學會了一個工具,就像是身上背了一把劍。
當你遇到敵人(問題)時,就拿出最適合的那把劍來砍敵人。
學校老師,努力的跟你講世界上有很多種劍,卻從來沒有告訴你當遇到什麼敵人時,該拿哪一把劍。
唉~把你搞混了。

如果你身上只有一把劍,遇到問題怎麼辦,不砍了嗎?視而不見了嗎?當然不是。
就算只有一把劍,遇到敵人,也要拿出來砍呀。只是砍的順不順手,能不能一刀斃命而已。
如果這把劍,你運用的非常順手,就算是難纏的敵人,頂多是多費點功夫而已。

懂了嗎?
如果你真的只會盒鬚圖,先不要理他。
先把你的問題搞清楚,到底要問什麼、要解決什麼問題。然後想辦法把你問題一直轉化成盒鬚圖能解的問題。
等等,千萬別跟我說「好吧!我只要學會盒鬚圖就好。」
別這麼沒志氣呀,更何況這個還不是真正的劍唷。

繞了一圈。
還是沒辦法告訴你,哪個比較好。
他有可能四個人(機器)做同一件事情,然後隨機抽樣7次的結果。
也有可能是一個人(機器),分四次隨機抽樣,每次抽樣7個數據。
(不過,抽象一點回答,這是解決單因子問題。)

這個就要看你的問題。
有些問題是了解現況,有些問題是預測未來。

無論何種,都是希望透過樣本資料(Data)來一窺全貌。

2013年6月23日 星期日

繪製Box-and-Whisker圖

無論是MS Excel與Mac Number都沒有支援Box-and-Whisker(盒鬚)圖。
但是,只要透過堆疊圖再加上誤差線,動些手腳就可以實作出來。
首先我們先來看看什麼是堆疊圖。
他是從0開始,逐一將數據累加上去。
選擇a的誤差線,就是會從10為開始,有正數與負數(方向)繪製一條細線,其長度可以設定。
有了這兩個基礎之後,我們再回顧一下,Box-and-Whisker是怎麼定義的。

所以,先看堆疊圖,應該要有三個box。
最底下的box是不是從0到第1個四分位數的高度(長度)。
接著是,第1個四分位數到中位數的長度。
再來,中位數到第3四分位數之長度。
接著是畫出那兩根突出的鬚。
下方的鬚,就是第一個box,往負數方向,取第1四分位數與最小值之差。
上方的鬚,就是第三個box,往正數方向,取最大值與第3四分位數之差。

等等!!
推疊圖有三個box,但是Box-and-Whisker只有兩個box。
喔~就是把最下方那個box不填滿就可以了。

再拿之前的數據資料做一遍。

2013年6月22日 星期六

實驗設計-7

寫到這邊,開始搞混了嗎?開始有點不知所措的嗎?
如果跟你說,再寫下去就是博士班資格考的內容時,你會不會打消學習意願了呢?
對我來說,知識比學歷重要。只可惜,台灣是一個重視學歷不重視知識的地方。
(往後會有更多數學,所以先補上這篇)

寫到這裡,只是統計的基本概念。往進階統計的方向寫下去,也有好多好多東西可以寫,機率就是一個很有趣的事情。再下去,數理統計、工程統計更是讓人一個頭兩個大。還可以朝品管的方向寫下去。還可以...。是的都可以。
而我,是因為看到最近又有什麼Big Data這個撈錢的術語。Data就是Data,沒有大小之分。若搞不清楚你收集資料的目的與意義,那也只是大垃圾與小垃圾之差別而已。

其實,真的沒有這麼難,而是你要知道你學這個要幹嘛?有很多在學校的老師都說數學不重要,不要學。我卻認為數學很重要,只可惜老師不會教。
而我,是學不是教。是從我自己學習的角度,來看這些「艱難」的學問。
還是回到原點,我們為什麼要學這些。

一切都是為了管理。
管理的目的是在控制異常。

所以,你才要去收集資料,看看他的誤差,然後「控制」這個誤差在你的理想範圍內。

所以,到目前為止,我們只有樣本數、樣本平均數、變異數、標準差、有中位數、四分位數等,這個期望用幾個數字,就能夠看出全貌。

說穿了,就是為了控制誤差。

因著誤差來源的因素不同,以及誤差所呈現的特殊樣式,所以後面才會搞出一堆有的沒有的數學模式。

之前提到過,為了讓「誤差減少誤差」所以,我們會「多抽樣幾個,並重複做幾次」。原則上每一次的抽樣都是獨立的行為。
這個模式就是單因子。我們只針對一個問題去抽取我們要的數據資料,利用「幾個」與「幾次」所得到的數據資料來推估母體,或者找出問題。

還有一種情境是「當這個配上那個會怎麼樣」這就是雙因子的問題。原則上每一次的抽樣,就得知道是在這個配上那個下所進行。這樣子的誤差就有可能會發生干擾。為了找出這個干擾,又有一堆的式子等著我們去學習,這類的應用甚至最後可以推估說,「這個配上那個根本沒有意義」,他們根本是獨立事件。

你想知道問題在哪裡嗎?你想透過資料找出問題在哪裡嗎?也許,你可以繼續看下去。

而我的目標,是希望這一段走完後,能慢慢走到機率論,再走到人工智慧的應用去。

實驗設計-6

相對於平均數有個中位數。這個都是看集中性。
變異數其實是看誤差,有點是在看離平均數有多遠。那應該還有個東西可以用來看散佈性,那就是四分位數。

中位數是把抽樣取得之樣本資料排序,然後取中間那個數據資料。四分位數,就是取得四分之一位置的數據資料。


又回到圖勝於文的問題了。
應該用什麼圖來呈現,這次抽樣所得資料的散佈情形呢?
我們會用Box-and-Whisker Plots。有人翻成盒鬚圖。
這個圖要用到5個資料分別為

依序說明:
最小值,第一四分位數,中位數,第三四分位數,最大值

再用之前的數據計算如下:
但是,Pages或EXCEL都沒有支援這個圖表,得用堆疊圖加誤差線的方式來呈現。有點麻煩,留著以後說明。
網路上倒有不少線上服務可以用。
http://easycalculation.com/statistics/box-plot-grapher.php
這張圖很清楚地描述各數字間的關係。

或者http://www.mathwarehouse.com/charts/box-and-whisker-plot-maker.php#boxwhiskergraph


另外,計算所得上述資料後,還有兩個東西順便知道一下。

  • 全距(Sample Range):最大值減去最小值


        


  • 四分位距(Interquartile Range) :第3四分位數減去第1四分位數


        

2013年6月21日 星期五

實驗設計-5

之前提到平均數是看集中性,又說他是重心。其實這樣子講是危險的。
想想打靶吧。
有一個人,「集中性」很差,一張靶紙上到處都有彈孔,可是,就是有幾個剛好射中靶心。成績很高。
另一個人,「集中性」很高,彈孔都集中在某一個區塊,可是,一堆彈孔就是離靶心很遠。

這兩個人到底誰厲害呢?
若光看平均數,你選了第一個人,那要殺敵還得碰運氣。
若是第二人,也許該告訴他,若想打A這個地方,應該要瞄在B的位置。或者應該說,其實是準心歪了,或者槍根本沒經過校正。
問題很多,但是,打靶的目的,就是要我們發現問題,解決問題。
是的,取樣的過程,就是要去發現問題,解決問題。

射手就是所謂的製程。
射出彈孔就是取樣的過程。
彈孔的所在位置,就是收集的樣本資料。
靶心是理想平均數,實際上應該稱之為期望值。
計算彈孔的平均數(因為是平面,所以會有X與Y)
但是~~散佈情形呢?

其實,散佈的反義好像是集中。其實,這個是相對的意義。
也就是說,應該要有個方法來計算散佈情形,然後得到一個值,可以相互比較。

分散性

只要有取樣得到一系列數字,就可以算樣本平均數。
如果去計算每個數字與平均數之差,感覺上好像可透過距離來呈現他的散佈性。
可惜,樣本資料有些比平均數大,有些比平均數小,這樣子來回抵消掉,也看不出什麼特性。
當然可以取絕對值,不過,如果用平方的話,是不錯的選擇。

樣本值與平均數之差,不就是「誤差」嗎?把所有的誤差先平方,避免抵消效果。然後再全部加起來,似乎可用來代表這組樣本資料的散佈情況。計算所得之值如果越大,就表示他的散佈情況就很嚴重。越小,就表示越集中。
專業一點的說法,這個計算之值稱之為樣本變異數。
他的公式如下:


這個公式應該不難理解,就是先計算平均數,然後個別數據資料減去平均數後再平方。每一個都這樣子做完之後,加總起來。之後,再除以n-1。
回想一下,平均數是除以n是吧。這兒為什麼要除以n-1呢?
我想,開始學統計的人,這是最無法理解之事。(喔~起碼我是)
這個n叫做自由度。

同一個數字,除以n 與除以n-1,所得結果何者為大,當然是n-1。
好,這個是來看散佈性,越小就是越集中,越大就是越分散。(有那種味道)
可是,我們只取得樣本資料不是嗎?這個數值越小,猜錯的機率不是越大嗎?

之前平均數,我們取了n個數字,這些數字真的是我們取得的。所以,除以n沒問題,有信心。
可是,樣本變異數,好像要減一個平均數,這可不是我們抽樣取得,他是計算結果,不是嗎?而且,他也只有樣本呀,並不能代表母數?你的信心度是不是應該要下降一點。也就是說,你的自由度(不是你操作的)不就應該少一個嗎?(這個就是平均數)所以,加總後所得除以n-1。後續,會看到n-2的,你應該可以聯想到,是在公式中會有兩個數字是經過計算所得,而不是原始的樣本資料。

其實,比較常用的是標準差,他的公式:


用試算表軟體,都有公式可以輕鬆算出來。
下圖C欄下方是用內建公式算的。至於D欄則是依據統計公式算的。


實驗設計-4



之前我們試著用直方圖來看我們資料的特性。一般是期望看出資料是左偏還是右偏,也就是最高點聚集區塊的位置。其實這樣不太科學的樣子。應該要有數字化來支持。

透過數字化的方式,其實也是從直方圖的感覺所衍生的。也就是要看出圖中的兩個重點:
1. 集中性
2. 分散性
哈~這兩個好像是矛盾右互斥的東西。
但是,對一堆我們想要研究的資料,在我們還沒有理解他之前,當然要看看他的集中與分散個別有什麼意思。

集中性

最常用的就是平均數(Mean),這裡所提到的是指樣本平均數。


假設收集了n個數據,分別是。把大家相加後,再除以總個數n,即可得。
這個數字具有「重心」的意義,也就是集中趨勢。
如果不考慮量測誤差,或者異常值,那應該每次取得的樣本值應該都是這個值。而且,我們也可以相信母體也應該是這個值。

但是,實際的情形可能不是我們所想像,有可能大部分的值其實都比理論平均值大一點,偏偏有一個值,就是筆理論平均值小很多,那平均下來,當然就會有偏差。
所以,有時候會想要去看看,如果我取樣n個並排序後,最中間那個值到底是什麼。如果他跟平均值一樣的話,那我們可以想像他的直方圖應該像是一個鐘形,中間高,兩邊低。
這個數字就叫做中位數。
可是我們抽樣的n,有可能是奇數,也有可能是偶數,最中間那個數就會不一樣了。


假設我們收集到下列11個數據:3,3,8,6,3,4,4,7,7,11,12
平均數的作法:
 

那中位數呢?
11個,所以是奇數,取最中間那個值就好,也就是第(11+1)/2=6個
先把原本的11個數據排序一下:
3,3,3,4,4,6,7,7,8,11,12
所以,第6個就是6。

跟平均數不一樣耶!!
是的,人生沒有樣樣都是完美的。

2013年6月20日 星期四

實驗設計-3

之前提到圖勝於文。最常用到的圖叫直方圖,他是用來看「頻率」的。
頻率的意思就有次數的概念。之前也提到所收集的數據往往是量測之結果,都會有誤差,就會有估計值。所以,重複做所得的數據也不一定都一樣。
所以,要有次數,每次數據都不一樣,這兩個合起來的意思就是要將資料數據進行「分組」。
緊接著的問題就是:
1. 要分幾組?
2. 每組的組距(每組數據的寬度)是多少?

分太細或分太粗都無法呈現數據的特性。
有時候,都需要經過幾次試驗後,看看圖形有無呈現出特殊的感覺。

設計組距

1. 找出樣本資料中最大值與最小值。
2. 最大減最小再除以期望組數。
3. 前項所得之數,再取一個方便處理的數字。
4. 依據這個方便處理的數字,從最小值加上此數字,定義出組距上、下界。

用前一個樣本資料為例,總共有32個數據。排序後


最大104.6;最小96.9 相差7.7。
期望分成10組,所以7.7/10= 0.77,方便處理取0.8。

繪製直方圖

我用Mac的Numbers做出之結果,如下圖。



這個有幾點要注意:
1. 原始資料排序是使用「重新整理」。
2. 方便處理的數字是用公式:=ROUNDUP(E3/E4,1)
3. 次數的公式:(原始文字會造成Blogger出錯)
4. 其實Number並沒有直方圖。他只有長條圖。這邊是動了手腳。
    4.1 設長條間距為0。這樣子各條又混再一塊了。
    4.2 設陰影為個別。這樣子就會弄出各條的邊界。
    4.3 其實X軸的數字位置是錯的。應該是在上下邊界處,而不是再中間。
5. 並不是所有的數據資料都得畫直方圖,也有可能是散佈圖。
6. 目前還沒有進化到,改變組數後仍可自動化。