weka學習(1)-資料格式
招展如樺
weka學習(1)-資料格式
巧婦難為無公尺之炊。首先我們來看看weka所用的資料應是什麼樣的格式。
跟很多電子**或資料分析軟體一樣,weka所處理的資料集是圖1那樣的乙個二維的**。
圖1這裡我們要介紹一下weka中的術語。**裡的乙個橫行稱作乙個例項(instance),相當於統計學中的乙個樣本,或者資料庫中的一條記錄。豎行稱作乙個屬性(attrbute),相當於統計學中的乙個變數,或者資料庫中的乙個字段。這樣乙個**,或者叫資料集,在weka看來,呈現了屬性之間的一種關係(relation)。圖1中一共有14個例項,5個屬性,關係名稱為「weather」。
weka儲存資料的格式是arff(attribute-relation file format)檔案,這是一種ascii文字檔案。圖1所示的二維**儲存在如下的arff檔案中。這也就是weka自帶的「weather.arff」檔案,在weka安裝目錄的「data」子目錄下可以找到。
**:
全選% arff file for the weather data with some numric features
%@relation weather
@attribute outlook
@attribute temperature real
@attribute humidity real
@attribute windy
@attribute play
@data
%% 14 instances
%sunny,85,85,false,no
sunny,80,90,true,no
overcast,83,86,false,yes
rainy,70,96,false,yes
rainy,68,80,false,yes
rainy,65,70,true,no
overcast,64,65,true,yes
sunny,72,95,false,no
sunny,69,70,false,yes
rainy,75,80,false,yes
sunny,75,70,true,yes
overcast,72,90,true,yes
overcast,81,75,false,yes
rainy,71,91,true,no
需要注意的是,在windows記事本開啟這個檔案時,可能會因為回車符定義不一致而導致分行不正常。推薦使用ultraedit這樣的字元編輯軟體察看arff檔案的內容。
下面我們來對這個檔案的內容進行說明。
識別arff檔案的重要依據是分行,因此不能在這種檔案裡隨意的斷行。空行(或全是空格的行)將被忽略。
以「%」開始的行是注釋,weka將忽略這些行。如果你看到的「weather.arff」檔案多了或少了些「%」開始的行,是沒有影響的。
除去注釋後,整個arff檔案可以分為兩個部分。第一部分給出了頭資訊(head information),包括了對關係的宣告和對屬性的宣告。第二部分給出了資料資訊(data information),即資料集中給出的資料。從「@data」標記開始,後面的就是資料資訊了。
關係宣告
關係名稱在arff檔案的第乙個有效行來定義,格式為
@relation
是乙個字串。如果這個字串包含空格,它必須加上引號(指英文標點的單引號或雙引號)。
屬性宣告
屬性宣告用一列以「@attribute」開頭的語句表示。資料集中的每乙個屬性都有它對應的「@attribute」語句,來定義它的屬性名稱和資料型別。
這些宣告語句的順序很重要。首先它表明了該項屬性在資料部分的位置。例如,「humidity」是第三個被宣告的屬性,這說明資料部分那些被逗號分開的列中,第三列資料 85 90 86 96 ... 是相應的「humidity」值。其次,最後乙個宣告的屬性被稱作class屬性,在分類或回歸任務中,它是預設的目標變數。
屬性宣告的格式為
@attribute
其中是必須以字母開頭的字串。和關係名稱一樣,如果這個字串包含空格,它必須加上引號。
weka支援的有四種,分別是
numeric-------------------------數值型
-----分類(nominal)型
string----------------------------字串型
date --------日期和時間型
其中和將在下面說明。還可以使用兩個型別「integer」和「real」,但是weka把它們都當作「numeric」看待。注意「integer」,「real」,「numeric」,「date」,「string」這些關鍵字是區分大小寫的,而「relation」「attribute 」和「date」則不區分。
數值屬性
數值型屬性可以是整數或者實數,但weka把它們都當作實數看待。
分類屬性
分類屬性由列出一系列可能的類別名稱並放在花括號中: 。資料集中該屬性的值只能是其中一種類別。
例如如下的屬性宣告說明「outlook」屬性有三種類別:「sunny」,「 overcast」和「rainy」。而資料集中每個例項對應的「outlook」值必是這三者之一。
@attribute outlook
如果類別名稱帶有空格,仍需要將之放入引號中。
字串屬性
字串屬性中可以包含任意的文字。這種型別的屬性在文字挖掘中非常有用。
示例:@attribute lcc string
日期和時間屬性
日期和時間屬性統一用「date」型別表示,它的格式是
@attribute date
其中是這個屬性的名稱,是乙個字串,來規定該怎樣解析和顯示日期或時間的格式,預設的字串是iso-8601所給的日期時間組合格式「yyyy-mm-ddthh:mm:ss」。
資料資訊部分表達日期的字串必須符合宣告中規定的格式要求(下文有例子)。
資料資訊
資料資訊中「@data」標記獨佔一行,剩下的是各個例項的資料。
每個例項佔一行。例項的各屬性值用逗號「,」隔開。如果某個屬性的值是缺失值(missing value),用問號「?」表示,且這個問號不能省略。例如:
@data
sunny,85,85,false,no
?,78,90,?,yes
字串屬性和分類屬性的值是區分大小寫的。若值中含有空格,必須被引號括起來。例如:
@relation lccvslcsh
@attribute lcc string
@attribute lcsh string
@data
ag5, 'encyclopedias and dictionaries.;twentieth century.'
as262, 'science -- soviet union -- history.'
日期屬性的值必須與屬性宣告中給定的相一致。例如:
@relation timestamps
@attribute timestamp date "yyyy-mm-dd hh:mm:ss"
@data
"2001-04-03 12:12:12"
"2001-05-03 12:59:55"
稀疏資料
有的時候資料集中含有大量的0值(比如購物籃分析),這個時候用稀疏格式的資料存貯更加省空間。
稀疏格式是針對資料資訊中某個例項的表示而言,不需要修改arff檔案的其它部分。看如下的資料:
@data
0, x, 0, y, "class a"
0, 0, w, 0, "class b"
用稀疏格式表達的話就是
@data
每個例項用花括號括起來。例項中每乙個非0的屬性值用《空格》 表示。是屬性的序號,從0開始計;是屬性值。屬性值之間仍用逗號隔開。這裡每個例項的數值必須按屬性的順序來寫,如 ,不能寫成。
注意在稀疏格式中沒有註明的屬性值不是缺失值,而是0值。若要表示缺失值必須顯式的用問號表示出來。
relational型屬性
在weka 3.5版中增加了一種屬性型別叫做relational,有了這種型別我們可以像關係型資料庫那樣處理多個維度了。但是這種型別目前還不見廣泛應用,暫不作介紹。
**:
Json資料格式
在web 系統開發中,經常會碰到客戶端和伺服器端互動的問題,比如說客戶端傳送乙個 ajax 請求,然後在伺服器端進行計算,計算後返回結果,客戶端接收到這個響應結果並對它進行處理。那麼這個結果以一種什麼資料結構返回,客戶端才能比較容易和較好的處理呢?通過幾個專案的實踐,我發現 json 格式的資料是一...
JSON資料格式
下面這段文字,摘錄自留作備忘 21世紀初,douglas crockford尋找一種簡便的資料交換格式,能夠在伺服器之間交換資料。當時通用的資料交換語言是xml,但是douglas crockford覺得xml的生成和解析都太麻煩,所以他提出了一種簡化格式,也就是json。json的規格非常簡單,只...
資料格式大全
yy mm dd 百分比00.00 12.68 13 12.68 3 23 2003 12 00 00 am 字元用於分隔格式字串中的正數 負數和零各部分。格式字串 資料 結果 12345.6789 12,345.68 12345.6789 12,345.68 12345 12345 12345 0...