2010-07-11 47 views
8

Giả sử tôi có một danh sách lớn các đối tượng (hàng nghìn hoặc hàng chục nghìn), mỗi đối tượng được gắn thẻ với một số thẻ. Có hàng tá hoặc hàng trăm thẻ có thể và cách sử dụng của chúng tuân theo luật năng lượng điển hình: một số thẻ được sử dụng vô cùng thường xuyên nhưng hầu hết đều hiếm. Tất cả các thẻ thường xuyên nhất có thể bỏ qua, trong thực tế.Hiển thị dữ liệu: Biểu đồ bong bóng, biểu đồ Venn và các thẻ mây (oh my!)

Bây giờ vấn đề là làm thế nào để hình dung mối quan hệ giữa các thẻ này. Đám mây từ khóa là một hình ảnh đẹp về tần số của chúng nhưng nó bỏ qua những thẻ nào xảy ra với các thẻ khác. Giả sử thẻ: thanh chỉ xuất hiện trên các đối tượng cũng được gắn thẻ: foo. Điều đó phải rõ ràng. Tương tự như vậy đối với ba thẻ có xu hướng xảy ra cùng nhau.

Bạn có thể làm cho mỗi thẻ trở thành bong bóng và cho phép chúng chồng lên nhau một phần. Về mặt kỹ thuật, đó là biểu đồ Venn nhưng xử lý nó theo cách đó có thể khó sử dụng. Ví dụ: biểu đồ của Google có thể tạo biểu đồ Venn, nhưng chỉ dành cho 3 hoặc ít hơn bộ (thẻ): http://code.google.com/apis/chart/docs/gallery/venn_charts.html
Lý do chúng biểu thị thành 3 bộ là nhiều hơn và có vẻ khủng khiếp. Xem "mức độ mở rộng cho số lượng bộ cao hơn" trên trang Wikipedia: http://en.wikipedia.org/wiki/Venn_diagrams

Nhưng đó chỉ là nếu mọi giao lộ có thể không trống. Nếu không quá 3 thẻ xảy ra (có thể sau khi ném ra các thẻ hiếm) thì một tập hợp các biểu đồ Venn có thể hoạt động (với kích thước của các bong bóng đại diện cho tần số thẻ).

Hoặc có thể là một biểu đồ (như ở đỉnh và cạnh) có cạnh dày hơn hoặc mỏng hơn để thể hiện tần suất xuất hiện đồng thời.

Bạn có ý tưởng hay chỉ dẫn nào về công cụ hoặc thư viện không? Lý tưởng nhất là tôi làm điều này với javascript nhưng tôi mở cho những thứ như R và Mathematica hoặc thực sự bất cứ điều gì khác. Tôi rất vui khi chia sẻ một số dữ liệu thực tế (bạn sẽ cười nếu tôi nói với bạn những gì nó đại diện) nếu có ai tò mò.

Phụ lục: Ứng dụng tôi đã lưu ý ban đầu là TagTime nhưng điều này cũng xảy ra với tôi rằng vấn đề này cũng ảnh hưởng đến vấn đề hình dung dấu trang ngon của một người.

+0

Bạn dường như đã bỏ qua các bit về * trình * từ câu hỏi của bạn. –

+0

Bạn có sở thích ngôn ngữ không? Ngoài ra, bạn có muốn viết ứng dụng dành cho máy tính để bàn hoặc ứng dụng web không? –

+0

Anh ta hỏi anh ta nên sử dụng thư viện nào. Trừ khi, anh ta quan tâm đến việc kiểm tra một cuốn sách, đây có lẽ là một câu hỏi lập trình. –

Trả lời

2

Tôi sẽ tạo thứ gì đó like this nếu bạn đang nhắm mục tiêu web. Các cạnh nối các nút có thể dày hơn hoặc tối hơn về màu sắc, hoặc có lẽ một lực mạnh hơn kết nối chúng sao cho chúng gần nhau. Tôi cũng sẽ thêm tên thẻ trong vòng kết nối.

Một số thư viện đó sẽ rất tốt cho việc này bao gồm:

Một số thú vị khác javascript thư viện giá trị xem xét là:

+0

Cảm ơn Jay! Tôi không biết về protovis; thật tuyệt vời. Đối với nền tảng/ngôn ngữ, web/javascript là lý tưởng nhưng nếu Mathematica hoặc R hoặc một cái gì đó có một cách tuyệt vời để làm điều này, tôi cũng muốn biết về điều đó là tốt. Đối với bố cục theo hướng lực lượng, điều tôi không thích về điều đó là nó không nắm bắt được mối quan hệ tập hợp con. Có lẽ một cái gì đó như thế này - http://vis.stanford.edu/protovis/ex/bubble.html - nhưng nơi các bong bóng có thể được bên trong nhau. – dreeves

+0

Cảm ơn một lần nữa, Jay. Protovis có vẻ là javascript, không phải flash, nếu tôi không nhầm. – dreeves

+0

Rất tiếc. Bạn nói đúng. Tôi vô tình đảo ngược Protovis và Flare. Nên chính xác ngay bây giờ. –

5

Nếu tôi hiểu câu hỏi của bạn một cách chính xác, một hình ảnh ma trận nên làm việc độc đáo ở đây. Việc thực hiện tôi có trong tâm trí sẽ là một ma trận n x m trong đó các mục được gắn thẻ là các hàng và mỗi loại thẻ là một cột riêng biệt. Mỗi ô trong ma trận sẽ bao gồm toàn bộ "1" và "0", nghĩa là một mục cụ thể hoặc có thẻ nhất định hoặc không.

Trong ma trận bên dưới (tôi xoay 90 độ sao cho nó phù hợp hơn trong cửa sổ này - vì vậy cột thực sự đại diện cho các mục được gắn thẻ và mỗi hàng hiển thị sự hiện diện hoặc vắng mặt của một thẻ nhất định trên tất cả các mục), tôi mô phỏng trường hợp trong đó có 8 thẻ200 mục được gắn thẻ. , "0" có màu xanh da trời và một số "1" có màu vàng nhạt.

Tất cả các giá trị trong ma trận này được chọn ngẫu nhiên (mỗi mục được gắn thẻ là tám điểm vẽ từ một hộp gồm hai thẻ, một màu xanh dương và một màu vàng (không có thẻ và thẻ) tương ứng. mô hình ở đây, nhưng nếu có một trong dữ liệu của bạn, kỹ thuật này, mà là chết đơn giản để thực hiện, có thể giúp bạn tìm thấy nó. không có gói hoặc thư viện bên ngoài):

# 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

Wow, ý tưởng tuyệt vời! Cảm ơn bạn! Tôi sẽ thử nó và xem nó trông như thế nào. – dreeves

+1

Tôi không nghĩ kiểu trực quan hóa này sẽ giúp tìm mẫu trong dữ liệu cho rằng có hàng nghìn đối tượng và hàng trăm thẻ. Hình ảnh kết quả có lẽ sẽ chỉ là một hình ảnh ồn ào rất lớn. –

+1

Một [seriation] tốt (http://cran.r-project.org/web/packages/seriation/index.html) rất quan trọng để xem các mẫu trong loại màn hình này – hadley

1

Note chắc chắn nó sẽ làm việc như tôi đã không kiểm tra đó, nhưng đây là cách tôi sẽ bắt đầu:

Bạn có thể tạo ra một ma trận như Doug gợi ý trong câu trả lời của mình, nhưng thay vì có các tài liệu như hàng và thẻ dưới dạng cột, bạn lấy một ma trận vuông nơi thẻ là hàng và cột. Giá trị của ô T1, T2 sẽ là số lượng tài liệu được gắn thẻ cả T1 và T2 (lưu ý rằng bằng cách làm điều đó bạn sẽ nhận được ma trận đối xứng vì [T1; T2] sẽ có cùng giá trị với [T2; T1]) .
Khi bạn đã thực hiện điều đó, mỗi hàng (hoặc cột) là một vectơ định vị thẻ trong một không gian có kích thước T. Các thẻ gần nhau trong không gian này thường xuất hiện cùng nhau. Để trực quan hóa sự xuất hiện đồng thời, bạn có thể sử dụng một phương pháp để giảm kích thước không gian của bạn hoặc bất kỳ phương pháp phân cụm nào. Ví dụ, bạn có thể sử dụng bản đồ tự tổ chức kohonen để chiếu không gian thứ nguyên của bạn vào không gian 2D, sau đó bạn sẽ nhận được ma trận 2D trong đó mỗi ô đại diện cho một vectơ trừu tượng trong không gian thẻ (nghĩa là vectơ không cần thiết trong tập dữ liệu của bạn). Vector này phản ánh một ràng buộc tôpô của không gian nguồn của bạn, và có thể được xem như là một vector "mô hình" phản ánh sự xuất hiện đồng thời đáng kể của một số thẻ.Hơn nữa, các ô gần nhau trên bản đồ này sẽ đại diện cho các vectơ gần nhau trong không gian nguồn, do đó cho phép bạn ánh xạ không gian thẻ trên một ma trận 2D.
Hình ảnh cuối cùng của ma trận có thể được thực hiện theo nhiều cách nhưng tôi không thể cung cấp cho bạn lời khuyên về điều đó mà không nhìn thấy kết quả của quá trình xử lý trước đó.

2

Mặc dù đây là một chủ đề cũ, nhưng tôi mới bắt gặp nó hôm nay.

Bạn cũng có thể xem xét sử dụng Self-Organizing Map.

Dưới đây là ví dụ về bản đồ tự tổ chức cho nghèo đói trên thế giới. Nó sử dụng 39 cái mà bạn gọi là "thẻ" của bạn để sắp xếp thứ bạn gọi là "đối tượng" của bạn.

http://www.cis.hut.fi/research/som-research/povertymap.gif Self-Organizing Map for World Poverty

Các vấn đề liên quan