Orange的數據挖掘工具入門使用html
聲明:python
1)本報告由博客園bitpeach撰寫,版權全部,免費轉載,請註明出處,並請勿做商業用途。git
2)若本文檔內有侵權文字或圖片等內容,請聯繫做者bitpeach刪除相應部分。github
3)本文檔內容涉及配合Python編程語言,介紹Orange數據挖掘工具的簡單實用主題。數據庫
4)僅僅做爲參考用途,拋磚引玉,不做爲證據證實用途,請自行取捨,覈實引用。編程
目錄 微信
0目錄 1數據結構
【1】爲何要寫該博文 1app
1.1緣由 2編程語言
本文大體介紹Orange的簡單知識,關鍵詞爲:Orange 的使用,Orange的數據挖掘簡介等
上一篇博文,介紹了Orange 的簡單狀況。本篇博文介紹如何入門使用。
=====================================================================================================================================
有網友表示沒有看懂相關的數據格式,我也查詢了相關的網頁,搜索引擎等。沒有TAB的數據格式詳細文法說明,即使是有,也不是數據挖掘裏的TAB格式,也有多是我沒有找到,若是有興趣的網友向交流,能夠與個人郵箱聯繫。
以著名的鳶尾花格式爲例說明,iris.tab來源於官方網址,這裏截取部分。
sepal<space>length<\t>sepal<space>width<\t>petal<space>length<\t>petal<space>width<\t>iris<\r\n> c<\t>c<\t>c<\t>c<\t>d<\r\n> <\t><\t><\t><\t>class<\r\n> 5.1<\t>3.5<\t>1.4<\t>0.2<\t>Iris-setosa<\r\n> 4.9<\t>3.0<\t>1.4<\t>0.2<\t>Iris-setosa<\r\n> 4.7<\t>3.2<\t>1.3<\t>0.2<\t>Iris-setosa<\r\n> 4.6<\t>3.1<\t>1.5<\t>0.2<\t>Iris-setosa<\r\n> |
因爲粘貼過來,空格或縮進世不可見的。因此我將數據修改一下,寫成較爲明白的格式。第一行主要是屬性,屬性只要使用TAB(縮進)隔開,就代表是不一樣的屬性,因此若是使用空格隔開,仍然認爲是同一屬性的名字。彼此之間使用縮進隔開,也正是tab數據格式的由來。
第二行主要是屬性的賦值類型,包括幾種。相似於WEKA的ARFF格式,可是ARFF格式,網上講得很是清楚,因此TAB反而缺乏不少資料。在官方的描述符(descriptor)相關網頁上記錄了第二行的相關屬性,引用以下:
Data instances in Orange can contain several types of variables: discrete, continuous, strings, and Python and types derived from it.
由引用結果可知,賦值的類型比WEKA的ARFF要少一些,主要是連續數值型,離散數值型,字符型和Python連接變量等。其中先說離散數值型(discrete),縮寫爲小寫字母d,表達的是數值離散,但兼備字符特徵。連續數值型,縮寫爲小寫字母c,表達的是連續數字變化,不具有字符特色。字符型則從字面能夠理解。(爲何說離散兼備字符特徵,由於排序的時候,依據離散數字值,排出來與字符ASCII排序是一致的,具體沒有理解透徹,但願交流指點。)
根據上面的例子,咱們發現第二行裏四個c,第五個是d,表示的是前四個屬性是連續數值,最後一個是離散的。Cloga網友在他的博客中也寫道:Orange使用一種專有的數據結構,擴展名爲.tab,其實就是用tab分隔每一個數據的純文本。文檔的第一行爲屬性的名稱,用tab分隔,第二行爲屬性對應的數據類型,包含連續性,間斷型和字符型。第三行包含一些元信息,用於指明依賴的特徵(分類),不相關的特徵(須要忽略的特徵)和元特徵。
因此第三行通常標註信息,至於什麼是元信息,還來得及諮詢CG老師,可是粗淺的理解能夠認爲第三行實際上就是在作備註,備註數據屬性是否能夠忽略,能夠參與計算(這很重要!)。通常註明class,表示屬性能夠忽略。請注意class所對應的屬性,只能選擇離散型(d)。不知道爲何(果斷我沒學好知識)。在某屬性下選擇連續型的賦值,還註明class,會在讀入的時候報錯,報錯類型(沒有及時截圖)大體爲class attribute is not legal value。(補充,左側線劃的句子是不正確的,是我沒有抓住本質的錯誤結論。導入not legal value的根本問題是tab數據格式的問題,與class註明對應的屬性類別沒有關係,即某個屬性,註明class,它能夠是任意屬性,能夠是s,能夠是c,能夠是d。我如今還原不出當時的這個報錯,我也回憶不起來出現not legal value的隱患在哪裏,隱隱約約以爲出現這個問題,估計是第三行class的tab數量錯了,或者某個縮進打錯了,致使not legal value,歸根究竟是簡簡單單的格式錯誤。)
綜上所述,須要注意上述數據例子的格式,關鍵的地方我都用紅色標註了,不可見的其餘字符也用藍色標註。只有這樣才能符合Orange的讀入,不然報錯。
主要是數據,就不贅述了。數據與數據屬性一一對應,使用縮進隔開就好了。
本部分爲補充,是今晚新增的查證的相關材料。
(1)How to Create Tab Delimited Files
(2)請問clusfavor軟件中的delimited Text應該怎麼翻譯呢
總結:說明查找相關的關鍵詞不能查詢「tab文件」或「tab數據格式」,而應該查詢「tab delimited 文件」之類的骨架關鍵詞。
同時材料how to create tab delimited files提供了EXCEL能夠另存爲的方法。(OFFICE2010裏的選擇是另存爲「文本(帶分隔).txt」)
================================================================================================================================
Orange不可能所有介紹,只能去閱讀官方資料。這裏就作一個聚類的小實驗,把實驗過程當中的問題總結起來,避免後面的人走彎路。記錄實驗的目的,絕對不只僅是證實成功,更是提醒後來者實驗的問題,去解決重現實驗的問題,這纔是正確的態度。我選取的小實驗主題爲聚類分析,專門是層次聚類。
在說到聚小實驗類以前,不得不提到Orange能夠做爲模塊導入python,所以不只可使用可視化操做,還可使用代碼腳本驗證。這些做爲模塊的官方說明文檔,均可以去閱讀,下面總結幾個:
(1)關於官方數據輸入(DATA Input)的代碼導入和代碼DEMO說明很是有用,解釋瞭如何使用Orange的標準庫來製做TAB數據,這是很是方便的。
(2)既然要聚類,必然要選擇聚類距離準則,關於官方網址提供計算距離(Distance)的方法和模塊接口能夠參看超連接。官方提供的例程很是容易理解,很是好用,很是好驗證。
(3)聚類選擇了層次聚類,能夠參看官方提供的層次聚類(Hierarchical Clustering)的模塊接口和代碼DEMO。
在這裏,我目前還在學習Orange 的標準庫製做TAB的方法,尚未徹底學會,所以就不提早撰寫相關的知識了(筆者注:貌似我犯了錯誤,我沒有發現Orange提供標準庫,好像它沒有製做TAB的標準庫,看來仍是要本身去製做)。使用Python寫TAB的數據是很是方便,比起C語言來,真的是很快速迅捷。本實驗的時候,製做的時候須要提醒幾點,並舉一個例子:
若是我分析的數據對象是一個DNA序列數據,請注意數據格式須要以下書寫:
No1<\t>No2<\t>No3<\t>No4<\t>No5<\t>Order<\r\n> d<\t>d<\t>d<\t>d<\t>d<\t>c<\r\n> <\r\n> G<\t>G<\t>T<\t>C<\t>G<\t>1<\r\n> G<\t>T<\t>A<\t> T<\t>C<\t>2<\r\n> …… |
No1<\t>No2<\t>No3<\t>No4<\t>No5<\t>Order<\r\n> d<\t>d<\t>d<\t>d<\t>d<\t>d<\r\n> <\t><\t><\t><\t><\t>class<\r\n> G<\t>G<\t>T<\t>C<\t>G<\t>1<\r\n> G<\t>T<\t>A<\t> T<\t>C<\t>2<\r\n> …… |
上述例子應該均可以使用,以前我都驗證過是可使用的,只不過不報錯,但不必定符合你的使用聚類計算。
兩個的屬性是五個鹼基,加上一個序列的編號。儘管Orange會內置編號,可是我不知道如何使用,而且使用本身的編號,利於數據庫管理。
上述左側請注意,若是不對屬性進行元信息的標註,那麼空出一行,什麼也不要寫。
上述右側請注意,若是標註了class,Order必定要離散的,不然可能報錯(好像我實驗的時候報錯了)。標註class 的話,沒有必要空出額外的一行。(補充,若是空了一行,可是不標註class,有時也報self.list out of range的溢出,可是仍然能夠跑數據。這很可能是若是你不標註class,又空出了一行,可是你那一行帶入不可見的字符,如空格或縮進,你空出的那一行必須只能是簡簡單單的回車換行。不然會出問題。)
可是不論上述兩種設計數據格式,Order頗有可能會出現問題,緣由是:
(1)對於程序內部來講,聚類須要計算距離,若是屬性不是須要計算距離的,結果被帶進去計算,致使結果是錯誤的。
詳細狀況:上述左側,若是Order不去註明class(表示忽略該屬性),則Order的數值帶入計算,影響聚類。
解決方式:對於計算距離的情形,非計算屬性能夠標記爲c,也能夠標記s,儘可能不標記d。若是標記d,能夠註明該屬性爲class,或許能夠不帶入運算。(補充:此爲後續實驗的體會)
(補充:)不管是連續型,仍是離散型。Orange的tab數據投入到聚類距離計算時,凡絕對值不是0和1,即大於等於2或小於等於-2,都會被程序認爲是1。因此多維屬性的數值通常爲0或1。若是不參與計算的屬性,如序列編號等,儘可能不要帶入計算中。因此要麼使用class註釋不想參與計算的數據(注意,class只能使用一次,因此建議使用標註string來處理),要麼使用string屬性。這是後續實驗的體會。
(2)對於人來講,聚類結果須要輸出,須要可視化的觀察,須要編號的顯示,可是Orange可能會出現必定問題。
詳細狀況:上述右側,若是Order註明了class,則在層次聚類的時候,忽略掉了該屬性,自動的remove掉了,致使層次聚類後,我不知道哪條序列是原來整體集合的順序第幾條?(補充:筆者此處語句不嚴謹,可能有問題。後續的進一步實驗以爲這句話是不正確的。)
綜上所述,而上述的狀況,經常見於入門知識,官方引言。所以這裏摸索到使用string,則不會參與計算的方法。即給Order賦予string(縮寫爲s),依然給1,2,3等編號,既能夠層次聚類的時候觀察編號,也能夠不參與聚類距離的計算。驗證方式爲:
我新建一個數據,並有四個序列,分別爲(這裏不給出TAB的完整格式了,就給出隨便的格式了,主要是給序列內容):
S1 S2 S3 S4 S5 S6 S7 S8 Order discrete discrete discret discrete discrete discrete discret discrete string
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 300 0 0 0 0 0 0 0 1 2 0 0 0 0 0 0 0 0 4000 |
若是string的數值參與影響,一定影響層次聚類的距離計算,可是結果輸出爲以下:
編號1與編號300的聚成一塊兒,既說明沒有影響,並且在層次聚類的圖後還能看見編號。(若是使用class,是在上圖中看不到編號的,手動則左側欄也是找不到調不出屬性的,由於class的屬性被忽略掉了。)
聚類的過程很是簡單,由於都是可視化操做。可視化操做的圖標都在左側欄裏,均可以找到。
(1)創建FILE,點選FILE圖標,拖動放置畫布上。
打開FILE,能夠讀取TAB數據,選中所要讀取的文件(已經制做好的TAB數據文件)
讀取後,須要顯示數據,而後選擇DATA欄目裏的第二行第一個,Data Table圖標,拖放至畫布中,而後從FILE圖標的右側引出一根線,能夠鏈接Data Table。
則在Paint Data裏能夠顯示數據了,顯示狀況以下。
同時注意,在顯示的時候,是看不到Order的屬性,可是若是是class屬性,默認會是灰色的,本身試試就知道了。
看到上圖左下角有一個commit on any change是用於修改數據後,從新保存提交,從新運行的操做按鈕。不要選上鉤,由於"不選鉤"的操做就是每一步操做若是影響了數據,馬上就會投入到後續生產線(這裏我將整個聚類的完整過程比喻成生產線),爲避免牽一髮動全身。建議不要勾上,使用手動提交的方式,便於生產線根據人的意志去調節調試。
(2)因爲咱們的主題是層次聚類,可是層次聚類以前須要計算距離。所以接下來,將Paint Data送入距離計算模塊,選擇不帶任何標記的純粹的三角形狀的Distance(在Unsupervised裏有純粹三角形的Distance)。
下圖由於我已經作了實驗,就不重頭一個一個拖放了,就指出下面紅色框內的爲distance模塊。同時,從Data Table圖標引出一條線接上Distance。
雙擊點開Data Table圖標,彈出的菜單左下角點擊send selections。這樣數據就被送入到distance了。在distance中能夠選擇距離公式,默認是歐式距離。
若是你須要更換公式,能夠在Distance Metric一欄,選擇完其餘的公式,點擊commit,而後再由Data Table送入數據,從新計算。
請注意,發送數據(send selection)是須要你選擇數據的,便可以使用鼠標拉選EXCEL那樣。若是你發送所有數據,也應該是須要手動選擇的,若是數據太多,不想鼠標拉選,能夠像下圖同樣,下圖紅框處,雙擊便可全選,而後發送數據便可。若是你發送數據(send selection)沒有任何反應,頗有可能就是你沒有選擇數據。沒有選擇數據,送出去是空數據。
(3)而後是層次聚類,在Unsupervised欄目的第二行第三個,選擇層次聚類圖標,而後拖放至白布上。從distance圖標引出一根線,鏈接層次聚類的圖標。
當把數據送過去後,若是數據不少的話,能夠看到distance圖標在環形緩衝,這個顯示效果作的很贊(上圖是若是數據不少的狀況,distance環形緩衝的示意)。打開層次聚類後,發現生成了系譜樹。
上圖右側是閾值,拖動閾值閥門,能夠顯示不一樣的聚類數目。
上圖左側三個紅框,分別指距離準則,屬性顯示,標註額外屬性。
第一個,距離準則,有以下的選擇。
這幾個選擇從上到下分別是最小距離,平均距離,最小方差距離,最大距離。(想學習具體方法,能夠參看百度文庫,文檔貢獻網友627004473的上傳文檔《聚類分析PDF》,在第29頁)
通常序列計算距離仍是選擇類平均法比較法,所以選擇它average linkage。
第二個,屬性顯示。就是我以前提到的,若是想在聚類圖譜中看到序列所屬的編號,若是使用class,annotation裏會沒有Order,因此使用string屬性,能夠解決這個問題。如今譜圖中就出現了編號,以下圖。
第三個額外標註,是爲了寫出聚類內樣本內容,須要標註一下序列所屬的類的類號。經過額外寫入,方便樣本保存的時候,裏面會有類標記。建議勾選,並本身起一個名字。
(4)層次聚類結束後,須要把數據導出,則分別拖放selected data和save,以下圖所示。
請注意,你的selected data是空白的,請雙擊層次聚類的圖標,在彈出的菜單左下角,點擊commit,提交你的操做變化。這樣內部程序發現變化,隨即將數據傳入selected data。而後你可按照本身的屬性去提取對應的數據。以下圖所示,我按照Order編號所在的聚類類號,保存我想要的數據,同時我還知道聚類劃分的數據屬於原集合的第幾條數據。因爲在層次聚類的界面,有一個append cluster ID以前介紹過了,勾選上,則在selected data中會多出一個類號的屬性。下圖中HierarCluster是我在層次聚類的圖中,append cluser ID命名新增所致。
save的圖標則在上圖的上圖中,用於存儲數據。首先在上圖的基礎上,產生規則,以下圖所示。
在上圖中,定義HierarCluster屬於Cluster1的樣本,點擊add,在規則區就產生了樣本,data out區域也註明了樣本數和特徵數。此時把save圖標拖出,回過來將select data打開,勾選(active)想要的數據樣本,點擊commit提交,就會傳到save裏。最後雙擊SAVE圖標,在彈出的的菜單中,再保存數據便可,以下圖所示。
侷限於目前接受學習的水平,還沒足夠的時間掌握orange的數據挖掘資料,本實驗有如下不足:
本實驗的特點特色在於:
(1)Orange的接口簡單易行,它的模塊類有demo可追溯,入手較快。
(2)全過程可視化操做,極其簡單,在操做上勝於WEKA
(3)Orange的聚類分析雖沒有WEKA參數全面,但獨具特色,含有信息預測的模塊,也很是有特點。
很是熱切地但願和期盼有一塊兒使用的朋友,一塊兒討論,一塊兒交流,若是有前輩指導就更好了!個人工做郵箱和github都掛在博客上,有興趣的能夠聯繫。
<<<<<<<<< 寫在頁面最底的小額打賞 >>>>>>>>>
若是讀者親願意的話,能夠小額打賞我,感謝您的打賞。您的打賞是個人動力,很是感激。
必讀:如您願意打賞,打賞方式任選其一,本頁面右側的公告欄有支付寶方式打賞,微信方式打賞。
避免因打賞產生法律問題,兩種打賞方式的任一打賞金額上限均爲5元,謝謝您的支持。
若有問題,請24小時內通知本人郵件。