2010-07-11 98 views
8

假設我有一個很大的對象列表(成千上萬或幾萬),每個對象都標有少量標籤。 有幾十個或幾百個可能的標籤,它們的用法遵循典型的冪律: 一些標籤被非常頻繁地使用,但大多數是罕見的。實際上,除了最常見的幾十個標籤外,其他所有標籤通常都可以忽略不計。數據可視化:泡泡圖,維恩圖和標籤雲(哦,我的!)

現在的問題是如何可視化這些標籤之間的關係。 標籤雲只是它們的頻率很好的可視化,但它忽略哪些標籤與其他標籤發生。 假設標籤:bar僅出現在標籤爲foo的對象上。 這應該是視覺上明顯的。 類似地,三個標籤傾向於一起出現。

你可以讓每個標籤都是一個氣泡,讓它們部分重疊。 從技術上講,這是一個維恩圖,但以這種方式處理它可能會很笨拙。 例如,Google圖表可以創建維恩圖,但僅限於3套或更少的套(標籤): http://code.google.com/apis/chart/docs/gallery/venn_charts.html
它們將其限制爲3套的原因是再多一點,它看起來很可怕。 請參閱維基百科頁面上的「擴展更多數量的套件」:http://en.wikipedia.org/wiki/Venn_diagrams

但是,只有在每個可能的交叉點都是非空的情況下。 如果不超過3個標籤共同出現(也許在拋出罕見標籤後),那麼一組維恩圖可以工作(用氣泡的大小表示標籤頻率)。

或者可能是一個圖形(如在頂點和邊緣)與視覺較厚或較薄的邊緣來表示共現的頻率。

你有什麼想法或指向工具或庫嗎? 理想情況下,我會用javascript來做這件事,但我對R和Mathematica或其他任何東西都是開放的。 如果有人好奇,我很高興分享一些實際的數據(如果我告訴你它代表什麼,你會笑)。

附錄:我最初想到的應用程序是TagTime,但我覺得這也適用於可視化一個美味書籤的問題。

+0

你似乎已經離開了一些關於*編程*從你的問題。 – 2010-07-11 20:30:13

+0

你有語言偏好嗎?另外,你想寫一個桌面應用程序或Web應用程序? – 2010-07-12 12:39:10

+0

他問他應該使用什麼庫。除非他有興趣查看一本書,否則這可能是一個編程問題。 – 2010-07-12 12:52:20

回答

2

如果您的目標是網絡,我會創建一些東西like this。連接節點的邊緣顏色可能較厚或較深,或者連接它們的力量較強,因此它們距離很近。我也會在圓圈內添加標籤名稱。

一些庫,這將是對這個非常好的包括:

其他一些有趣的JavaScript值得探討庫是:

+0

謝謝Jay!我不知道原始人;這很好。至於平臺/語言,web/javascript是理想的,但如果Mathematica或R或其他東西有很好的方法來做到這一點,我也很想知道。至於力量導向佈局,我不喜歡的是它沒有捕獲子集關係。也許像這樣 - http://vis.stanford.edu/protovis/ex/bubble.html - 但氣泡可以在裏面。 – dreeves 2010-07-12 15:24:35

+0

再次感謝傑伊。如果我沒有弄錯,Protovis似乎是javascript,而不是flash。 – dreeves 2010-07-12 16:27:02

+0

糟糕。你是對的。我無意中推翻了Protovis和Flare。現在應該是正確的。 – 2010-07-12 19:14:09

5

如果我正確理解你的問題,一個圖像矩陣應該很好的工作在這裏。我想到的實現將是一個n×m的矩陣,其中標記的項目是行,並且每個標記類型是一個單獨的列。矩陣中的每個單元格將完全由「1」和「0」組成,即特定項目或者具有給定標籤或者不具有。

在下面的矩陣(我旋轉了90度,所以它會適合在這個窗口更好 - 所以列實際上代表標記的項目,並且每行顯示所有項目中給定標記的存在或不存在),我模擬其中有8個標籤200個帶標籤項目的情況。 ,「0」是藍色「1」是淡黃色

這個矩陣中的所有值都是隨機選擇的(每個標記的項目都是由一個包含兩個標記,一個藍色和一個黃色(分別沒有標記和標記)的盒子抽取的八個畫面,因此毫不奇怪,沒有視覺證據這裏的模式,但如果有一個在你的數據,這種技術,這是死的簡單實現,可以幫助你找到它。

我用[R生成和繪製模擬數據,只用基礎圖形(無外部封裝或庫):

# create the matrix 
A = matrix(data=r1, nrow=1, ncol=8) 

# populate it with random data 
for (i in seq(0, 200, 1)){r1 = sample(0:1, 8, replace=TRUE); A = rbind(A, r1)} 

# now plot it 
image(z=A, ann=F, axes=F, col=topo.colors(12)) 

alt text http://img690.imageshack.us/img690/3236/imagematrix01.png

+0

哇,好主意!謝謝!我會試試看看它的外觀。 – dreeves 2010-07-13 13:26:30

+1

由於存在「數千個對象」和「數百個標籤」,我不認爲這種可視化將有助於查找數據中的模式。由此產生的圖像可能只是一個巨大的噪聲圖片。 – 2011-05-24 11:23:40

+1

一個好的[系列化](http://cran.r-project.org/web/packages/seriation/index.html)對於在這種顯示中查看模式非常重要 – hadley 2011-09-15 13:14:12

1

注意確保它的工作,因爲我沒有測試,但這裏是我會怎麼開始:

道格建議在他的回答,您可以創建一個矩陣,但不是有文件爲行和標籤作爲列,你需要一個矩形矩陣,其中標籤是行和列。單元格T1的值; T2將是用T1和T2標記的文檔的數量(注意,通過這樣做,您將得到對稱矩陣,因爲[T1; T2]將與[T2; T1]具有相同的值)) 。
一旦你這樣做了,每一行(或列)就是一個向量,它定位了T維空間中的標籤。在這個空間中彼此相鄰的標籤經常一起出現。爲了可視化共現,您可以使用一種方法來減少空間維度或任何聚類方法。例如,您可以使用kohonen自組織映射將您的T維空間投影到2D空間,然後您將獲得一個2D矩陣,其中每個單元格代表標記空間中的抽象矢量(這意味着該矢量不是必需的在你的數據集中)。這個矢量反映了你的源空間的拓撲約束,並且可以被看作是反映一些標籤的重要共同發生的「模型」矢量。此外,在該地圖上彼此靠近的單元格將表示在源空間中彼此接近的矢量,因此允許您將標籤空間映射到2D矩陣上。
矩陣的最終可視化可以通過多種方式完成,但如果不先查看先前處理的結果,我無法給出建議。