2012-10-25 44 views
6

Tôi có một tập tin văn bản với khoảng 8,5 triệu điểm dữ liệu theo hình thức:Sử dụng Python để tạo ra một biểu đồ kết nối/mạng

Company 87178481 
Company 893489 
Company 2345788 
[...] 

Tôi muốn sử dụng Python để tạo ra một biểu đồ kết nối để xem những gì các mạng giữa các công ty trông như thế nào. Từ ví dụ trên, hai công ty sẽ chia sẻ lợi thế nếu giá trị trong cột thứ hai là như nhau (làm rõ từ/cho Được ghép nối).

Tôi đã sử dụng gói NetworkX và đã có thể tạo mạng cho vài nghìn điểm, nhưng nó không làm cho nó thông qua tệp văn bản đầy đủ 8,5 triệu nút. Tôi chạy nó và để lại trong khoảng 15 giờ, và khi tôi trở lại, con trỏ trong vỏ vẫn nhấp nháy, nhưng không có đồ thị đầu ra.

Có an toàn để cho rằng nó vẫn đang chạy? Có cách tiếp cận tốt hơn/nhanh hơn/dễ dàng hơn để vẽ đồ thị hàng triệu điểm không?

+0

Các công ty được kết nối như thế nào? I E. là một cạnh được chia sẻ giữa công ty A và B nếu cột thứ hai là như nhau? – Hooked

+0

Vâng, đó là chính xác. – Jon

+0

Không thể nói rằng tôi đã có bất kỳ vấn đề với 8.5million trong networkx. Bạn có bao nhiêu đỉnh khác nhau? Bạn đang sử dụng đạo diễn/không hướng dẫn? Ngoài ra, khi bạn nói "không có biểu đồ đầu ra" - bạn có ý nghĩa gì? [ví dụ, bạn không cố gắng in nó hoặc một cái gì đó] –

Trả lời

5

Nếu bạn có 1000 nghìn điểm dữ liệu, bạn sẽ cần một số cách để xem ảnh rộng. Tùy thuộc vào những gì bạn đang tìm kiếm chính xác, nếu bạn có thể chỉ định "khoảng cách" giữa các công ty (nói số lượng kết nối riêng biệt), bạn có thể trực quan hóa các mối quan hệ (hoặc phân cụm) qua Dendrogram.

scipy không phân nhóm:

http://docs.scipy.org/doc/scipy/reference/cluster.hierarchy.html#module-scipy.cluster.hierarchy

và có một chức năng để biến chúng thành dendrograms cho visualization:

http://docs.scipy.org/doc/scipy/reference/generated/scipy.cluster.hierarchy.dendrogram.html#scipy.cluster.hierarchy.dendrogram

Một ví dụ cho một hàm khoảng cách con đường ngắn nhất qua networkx:

http://networkx.lanl.gov/reference/generated/networkx.algorithms.shortest_paths.generic.shortest_path.html#networkx.algorithms.shortest_paths.generic.shortest_path

Cuối cùng bạn sẽ phải quyết định cách bạn muốn cân nhắc khoảng cách giữa hai công ty (đỉnh) trong biểu đồ của bạn.

+0

Có cách nào đơn giản hơn hoặc được ưu tiên hơn để thực hiện việc xây dựng mạng này trong SAS hoặc R? – Jon

+0

@Jon Câu trả lời này (mặc dù các liên kết được cung cấp) là ngôn ngữ bất khả tri. Bạn đang muốn hiển thị gì với đồ thị triệu điểm của bạn? Kết nối chung, phân cụm khác nhau, trung tâm trung tâm? Không rõ bạn muốn loại bỏ dữ liệu nào khi có nhiều câu hỏi khác nhau. – Hooked

+0

Đó là một chút mơ hồ. Tôi muốn xem các cụm và điểm kết nối giữa các cụm. Ý tưởng là sử dụng dữ liệu để tiếp cận mạng để xem các kết nối đơn lẻ tồn tại giữa một cụm chính và cụm nhỏ hơn. Những kết nối kinh doanh số ít này sau đó có thể được sử dụng cho nhiều mục đích tiếp thị được nhắm mục tiêu, v.v. – Jon

4

Bạn có quá nhiều điểm dữ liệu và nếu bạn đã trực quan hóa mạng, nó sẽ không có ý nghĩa gì. Bạn cần phải có cách để 1) giảm số lượng các công ty bằng cách loại bỏ những người ít quan trọng/ít kết nối 2) tóm tắt đồ thị bằng cách nào đó và sau đó hình dung.

để giảm kích thước dữ liệu có thể tốt hơn để tạo mạng độc lập (sử dụng mã của riêng bạn để tạo ra một edgelist của các công ty). Bằng cách này, bạn có thể giảm kích thước của biểu đồ của bạn (bằng cách loại bỏ các ví dụ, có thể là nhiều).

Để tóm tắt, tôi khuyên bạn nên chạy thuật toán phân cụm hoặc thuật toán phát hiện cộng đồng. Điều này có thể được thực hiện rất nhanh ngay cả đối với các mạng rất lớn. Sử dụng phương pháp "fastgreedy" trong gói igraph: http://igraph.sourceforge.net/doc/R/fastgreedy.community.html (có một thuật toán nhanh hơn có sẵn trực tuyến, đây là bởi Blondel et al: http://perso.uclouvain.be/vincent.blondel/publications/08BG.pdf Tôi biết mã của họ có sẵn trực tuyến ở đâu đó)

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