Biểu đồ kết nối python

Xem các phiên từ Hội nghị chuyên đề WiML về các mô hình khuếch tán với KerasCV, ML trên thiết bị, v.v. Xem theo yêu cầu

  • TenorFlow
  • Học hỏi
  • Lõi TensorFlow
  • hướng dẫn

Sắp xếp ngăn nắp với các bộ sưu tập Lưu và phân loại nội dung dựa trên sở thích của bạn

Các hướng dẫn của TensorFlow được viết dưới dạng sổ ghi chép Jupyter và chạy trực tiếp trong Google Colab—một môi trường sổ ghi chép được lưu trữ không yêu cầu thiết lập. Nhấp vào nút Chạy trong Google Colab

Cho những người mới bắt đầu

Nơi tốt nhất để bắt đầu là với API tuần tự Keras thân thiện với người dùng. Xây dựng mô hình bằng cách ghép nối các khối xây dựng với nhau. Sau những hướng dẫn này, hãy đọc hướng dẫn Keras

khởi động nhanh cho người mới bắt đầu

Đây là "Xin chào, Thế giới. " notebook hiển thị Keras Sequential API và
>>> g = Graph[1]
4

Khái niệm cơ bản về máy ảnh

Bộ sưu tập sổ ghi chép này thể hiện các tác vụ máy học cơ bản bằng Keras

Tải dữ liệu

Các hướng dẫn này sử dụng
>>> g = Graph[1]
5 để tải các định dạng dữ liệu khác nhau và xây dựng các đường dẫn đầu vào

Dành cho chuyên gia

API phân lớp và chức năng của Keras cung cấp giao diện xác định theo lần chạy để tùy chỉnh và nghiên cứu nâng cao. Xây dựng mô hình của bạn, sau đó viết tiến và lùi. Tạo các lớp tùy chỉnh, kích hoạt và vòng đào tạo

Khởi động nhanh nâng cao

Đây là "Xin chào, Thế giới. " notebook sử dụng API phân lớp Keras và vòng lặp đào tạo tùy chỉnh

tùy biến

Bộ sưu tập sổ ghi chép này cho biết cách xây dựng các lớp tùy chỉnh và các vòng đào tạo trong TensorFlow

đào tạo phân tán

Phân phối đào tạo mô hình của bạn trên nhiều GPU, nhiều máy hoặc TPU

Phần Nâng cao có nhiều ví dụ về sổ ghi chép hướng dẫn, bao gồm Dịch máy thần kinh, Máy biến áp và CycleGAN

Dash là một khung nguồn mở để xây dựng các ứng dụng phân tích, không yêu cầu Javascript và nó được tích hợp chặt chẽ với thư viện vẽ đồ thị Plotly

Tìm hiểu về cách cài đặt Dash tại https. // dấu gạch ngang. mảnh đất. ly/cài đặt

Ở mọi nơi trong trang này mà bạn thấy

>>> g = Graph[1]
6, bạn có thể hiển thị cùng một hình trong ứng dụng Dash bằng cách chuyển nó tới đối số
>>> g = Graph[1]
7 của thành phần
>>> g = Graph[1]
8 từ gói
>>> g = Graph[1]
9 tích hợp như thế này

Chương này chứa một tổng quan ngắn về khả năng của igraph. Bạn nên đọc nó ít nhất một lần nếu bạn chưa quen với igraph. Tôi cho rằng bạn đã cài đặt igraph; . Sự quen thuộc với ngôn ngữ Python cũng được giả định; . Mark Pilgrim's Dive Into Python là cuốn sách mà cá nhân tôi đề xuất. Nếu đây là lần đầu tiên bạn thử sử dụng một ngôn ngữ lập trình, A Byte of Python thậm chí còn tốt hơn. Nếu bạn đã có nền tảng lập trình ổn định bằng các ngôn ngữ khác và bạn chỉ muốn có cái nhìn tổng quan nhanh về Python, Học Python trong 10 phút có lẽ là lựa chọn tốt nhất dành cho bạn

Biểu đồ bắt đầu¶

igraph là một mô-đun Python, do đó nó có thể được nhập chính xác theo cách giống như bất kỳ mô-đun Python thông thường nào khác tại dấu nhắc Python

$ python
Python 2.5.1 [r251:54863, Apr 15 2008, 22:57:26]
[GCC 4.0.1 [Apple Inc. build 5465]] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import igraph

Thao tác này nhập các đối tượng và phương thức của igraph bên trong một không gian tên riêng có tên là igraph . Bất cứ khi nào bạn muốn gọi bất kỳ phương thức nào của igraph, bạn sẽ phải cung cấp tiêu chuẩn không gian tên thích hợp. e. g. , để kiểm tra xem bạn đang sử dụng phiên bản igraph nào, bạn có thể làm như sau.

>>> import igraph
>>> print igraph.__version__
0.6

Một cách khác để sử dụng igraph là nhập tất cả các đối tượng và phương thức của nó vào không gian tên Python chính [vì vậy bạn không phải nhập tiêu chuẩn không gian tên mỗi lần]. Điều này là tốt miễn là không có đối tượng và phương thức nào của riêng bạn không xung đột với những đối tượng và phương thức được cung cấp bởi igraph

>>> from igraph import *

Cách thứ ba để khởi động igraph là chỉ cần gọi tập lệnh khởi động được cung cấp cùng với gói igraph mà bạn đã cài đặt. Không quá ngạc nhiên, tập lệnh được gọi là igraph và với điều kiện là tập lệnh nằm trên đường dẫn của bạn trong dòng lệnh của hệ điều hành của bạn [điều này gần như chắc chắn xảy ra trên Linux và OS X], bạn chỉ cần gõ igraph tại dòng lệnh. Người dùng Windows sẽ tìm thấy tập lệnh bên trong thư mục con scripts của Python và bạn có thể phải thêm tập lệnh theo cách thủ công vào đường dẫn của mình để có thể sử dụng tập lệnh .

Khi bạn bắt đầu tập lệnh, bạn sẽ thấy một cái gì đó như thế này

$ igraph
No configuration file, using defaults
igraph 0.6 running inside Python 2.5.1 [r251:54863, Apr 15 2008, 22:57:26]
Type "copyright", "credits" or "license" for more information.
>>>

Tập lệnh khởi động dòng lệnh nhập tất cả các phương thức và đối tượng của igraph vào không gian tên chính, do đó, thực tế tập lệnh này tương đương với từ . Sự khác biệt giữa hai cách tiếp cận [ngoài việc tiết kiệm một số thao tác gõ] là tập lệnh dòng lệnh kiểm tra xem bạn đã cài đặt trình bao cao cấp hơn của Python chưa và sử dụng trình bao đó thay vì trình bao Python tiêu chuẩn. Hiện tại, mô-đun tìm kiếm IPython và IDLE [vỏ đồ họa dựa trên Tcl/Tk được cung cấp cùng với Python]. Nếu cả IPython và IDLE đều không được cài đặt, tập lệnh khởi động sẽ khởi chạy trình bao Python mặc định. Bạn cũng có thể sửa đổi thứ tự tìm kiếm các shell này bằng cách điều chỉnh tệp cấu hình của igraph [xem cấu hình-igraph]. import *. The difference between the two approaches [apart from saving some typing] is that the command-line script checks whether you have any of Python’s more advanced shells installed and uses that instead of the standard Python shell. Currently the module looks for IPython and IDLE [the Tcl/Tk-based graphical shell supplied with Python]. If neither IPython nor IDLE is installed, the startup script launches the default Python shell. You can also modify the order in which these shells are searched by tweaking igraph‘s configuration file [see configuring-igraph].

Nói chung, bạn nên sử dụng tập lệnh khởi động dòng lệnh khi sử dụng igraph một cách tương tác [i. e. , khi bạn chỉ muốn tải nhanh hoặc tạo một số đồ thị, tính toán một số thuộc tính cơ bản và lưu kết quả vào đâu đó]. Đối với các quy trình phân tích biểu đồ không dùng một lần mà thỉnh thoảng bạn định chạy lại, bạn nên viết một tập lệnh riêng trong . py và nhập igraph bằng một trong các phương pháp trên khi bắt đầu tập lệnh, sau đó khởi chạy tập lệnh bằng trình thông dịch Python.

Từ giờ trở đi, mọi ví dụ trong tài liệu sẽ giả định rằng các đối tượng và phương thức của igraph được nhập vào không gian tên chính [i. e. , chúng tôi đã sử dụng từ igraph nhập * instead of import igraph]. If you let igraph take its own namespace, please adjust all the examples accordingly.

Tạo biểu đồ từ đầu¶

Giả sử rằng bạn đã bắt đầu igraph thành công, đã đến lúc tạo biểu đồ igraph đầu tiên của bạn. Điều này khá đơn giản

>>> g = Graph[1]

Câu lệnh trên đã tạo một đồ thị vô hướng với một đỉnh duy nhất và gán nó cho biến g. Để xác nhận rằng nó thực sự là một biểu đồ igraph, chúng ta có thể in nó

>>> g

Điều này cho chúng ta biết rằng g là một thể hiện của lớp Graph của igraph và nó hiện đang sống tại địa chỉ bộ nhớ 0x4c87a0 [the exact output will almost surely be different for your platform]. To obtain a more user-friendly output, we can try to print the graph using Python’s print của Python.

>>> print[g]
Undirected graph [|V| = 1, |E| = 0]

Điều này không quá thú vị cho đến nay; . Trước tiên hãy thêm một số đỉnh

>>> g.add_vertices[2]

Đồ thị. add_vertices[] [tôi. e. , phương thức add_vertices[] của lớp Graph ] thêm phần đã cho . Graph object that was returned is exactly the same].

Bây giờ đồ thị của chúng ta có ba đỉnh nhưng không có cạnh, vì vậy hãy thêm một số cạnh nữa. Bạn có thể thêm các cạnh bằng cách gọi Graph. add_edges[] - nhưng để thêm các cạnh, bạn phải tham chiếu đến các đỉnh hiện có bằng cách nào đó. igraph sử dụng ID đỉnh số nguyên bắt đầu từ 0, do đó, đỉnh đầu tiên của biểu đồ của bạn có chỉ số 0, đỉnh thứ hai có chỉ số 1, v.v. Các cạnh được chỉ định bởi các cặp số nguyên, vì vậy [[0,1], [1,2]] biểu thị . một giữa đỉnh thứ nhất và thứ hai, và một giữa đỉnh thứ hai và thứ ba của đồ thị. Chuyển danh sách này tới Graph. add_edges[] thêm hai cạnh này vào biểu đồ của bạn.

________số 8

add_edges[] đủ thông minh để tìm ra điều bạn muốn làm trong hầu hết các trường hợp. nếu bạn cung cấp một cặp số nguyên, nó sẽ tự động cho rằng bạn muốn thêm một cạnh. Tuy nhiên, nếu bạn cố gắng thêm các cạnh vào các đỉnh có ID không hợp lệ [i. e. , bạn thử thêm một cạnh vào đỉnh 5 khi bạn chỉ có ba cạnh], bạn sẽ gặp ngoại lệ.

>>> g.add_edges[[5, 0]]
Traceback [most recent call last]:
  File "", line 6, in 
igraph.core.InternalError: Error at ../../src/type_indexededgelist.c:245: cannot add edges, invalid vertex id

Hầu hết các hàm igraph sẽ tăng igraph. cốt lõi. InternalError nếu xảy ra sự cố. Thông báo tương ứng với trường hợp ngoại lệ cung cấp cho bạn một lời giải thích ngắn gọn bằng văn bản về những gì đã xảy ra [ không thể thêm cạnh,thêmcạnh,thêmcạnh, . Tên tệp và số dòng chính xác có thể không cung cấp nhiều thông tin cho bạn, nhưng nó rất có giá trị đối với các nhà phát triển igraph nếu bạn cho rằng mình đã tìm thấy lỗi trong igraph và bạn muốn báo cáo lỗi đó. thêmcạnh,thêmcạnh, . Tên tệp và số dòng chính xác có thể không cung cấp nhiều thông tin cho bạn, nhưng nó rất có giá trị đối với các nhà phát triển igraph nếu bạn cho rằng mình đã tìm thấy lỗi trong igraph và bạn muốn báo cáo lỗi đó. thêmcạnh,thêmcạnh, . Tên tệp và số dòng chính xác có thể không cung cấp nhiều thông tin cho bạn, nhưng nó rất có giá trị đối với các nhà phát triển igraph nếu bạn cho rằng mình đã tìm thấy lỗi trong igraph và bạn muốn báo cáo lỗi đó. thêmcạnh,thêmcạnh, . Tên tệp và số dòng chính xác có thể không cung cấp nhiều thông tin cho bạn, nhưng nó rất có giá trị đối với các nhà phát triển igraph nếu bạn cho rằng mình đã tìm thấy lỗi trong igraph và bạn muốn báo cáo lỗi đó. thêmcạnh,thêmcạnh, . Tên tệp và số dòng chính xác có thể không cung cấp nhiều thông tin cho bạn, nhưng nó rất có giá trị đối với các nhà phát triển igraph nếu bạn cho rằng mình đã tìm thấy lỗi trong igraph và bạn muốn báo cáo lỗi đó. invalid vertex id] along with the corresponding line in the C source where the error occurred. The exact filename and line number may not be too informative to you, but it is invaluable for igraph developers if you think you found an error in igraph and you want to report it.

Bạn có thể thắc mắc tại sao việc trả về chính biểu đồ khi thêm đỉnh hoặc cạnh lại hữu ích. Lý do là bạn có thể thuận tiện xâu chuỗi các cuộc gọi của mình đến add_vertices[]add_edges[]. Let us go on with our graph g và thêm một số đỉnh và cạnh vào đó.

>>> import igraph
>>> print igraph.__version__
0.6
0

Bây giờ, điều này tốt hơn. Ta có đồ thị vô hướng có sáu đỉnh và bảy cạnh. Các cạnh cũng có ID, tương tự như các đỉnh; . ID đỉnh và cạnh luôn liên tục và hệ quả trực tiếp của thực tế này là nếu bạn tình cờ xóa một cạnh, rất có thể một số [hoặc tất cả] các cạnh sẽ được đánh số lại. Hơn nữa, nếu bạn xóa một đỉnh, thì ngay cả ID của đỉnh cũng sẽ thay đổi. Có thể xóa các cạnh bằng cách delete_edges[] và thao tác này yêu cầu phải xóa danh sách các ID cạnh [hoặc một ID cạnh duy nhất]. Các đỉnh có thể bị xóa bởi delete_vertices[] và bạn có thể đã đoán được rằng thao tác này yêu cầu phải xóa một danh sách ID đỉnh [hoặc một ID đỉnh duy nhất]. Nếu bạn không biết ID của một cạnh mà bạn muốn xóa, nhưng bạn biết ID của các đỉnh tại hai điểm cuối của nó, bạn có thể sử dụng get_eid[] to get the edge ID. Remember, all these are methods of the Graph và bạn phải gọi chúng trên Graph instance!

>>> import igraph
>>> print igraph.__version__
0.6
1

summary[] là một lệnh mới mà bạn chưa từng thấy trước đây; . Nó liệt kê số đỉnh và cạnh, kiểm tra xem đồ thị có hướng hay không, đếm các thành phần được kết nối, tính toán đường kính đồ thị, mật độ cạnh và độ dài đường dẫn trung bình. Tất nhiên, tất cả những thông tin này có thể được tính riêng bằng các phương pháp thích hợp của Đồ thị ; . Nói chung, summary[] chủ yếu dành cho các đối tượng biểu đồ nhỏ hơn vì việc tính toán một số thuộc tính này trên một biểu đồ thực sự lớn sẽ mất rất nhiều thời gian.

Tạo đồ thị¶

igraph bao gồm một bộ lớn các trình tạo biểu đồ có thể được chia thành hai nhóm. trình tạo đồ thị xác định và ngẫu nhiên. Trình tạo xác định tạo ra cùng một biểu đồ nếu bạn gọi chúng với các tham số chính xác giống nhau, trong khi trình tạo ngẫu nhiên tạo ra một biểu đồ khác nhau mỗi lần. Trình tạo tất định bao gồm các phương pháp tạo cây, mạng thông thường, vòng, vòng hợp âm mở rộng, một số đồ thị nổi tiếng, v.v., trong khi trình tạo ngẫu nhiên được sử dụng để tạo mạng ngẫu nhiên Erdős-Rényi, mạng Barabási-Albert, đồ thị ngẫu nhiên hình học, v.v. igraph có quá nhiều trình tạo để trình bày tất cả chúng trong hướng dẫn này, vì vậy chúng tôi sẽ chỉ thử một trình tạo tất định và ngẫu nhiên thay thế

>>> import igraph
>>> print igraph.__version__
0.6
2

Đồ thị. Tree[] tạo biểu đồ cây thông thường. Cái mà chúng tôi đã tạo có 127 đỉnh và mỗi đỉnh [ngoài các lá] có hai con [và tất nhiên là một cha]. Cho dù bạn gọi bao nhiêu lần Graph. Tree[] , biểu đồ được tạo ra sẽ luôn giống nhau nếu bạn sử dụng các tham số giống nhau.

>>> import igraph
>>> print igraph.__version__
0.6
3

Đoạn mã trên cũng cho bạn thấy rằng phương thức get_edgelist[] của Graph graph objects return a list that contains pairs of integers, one for each edge. The first member of the pair is the source vertex ID and the second member is the target vertex ID of the corresponding edge. This list is too long, so let’s just print the first 10 elements!

>>> import igraph
>>> print igraph.__version__
0.6
4

Hãy làm tương tự với một trình tạo ngẫu nhiên

>>> import igraph
>>> print igraph.__version__
0.6
5

Đồ thị. GRG[] tạo biểu đồ ngẫu nhiên hình học. n điểm được chọn ngẫu nhiên và đồng nhất bên trong hình vuông đơn vị và các cặp điểm gần nhau hơn khoảng cách d xác định trước được nối với nhau bằng một cạnh. Trong trường hợp của chúng tôi, n là 100 và d là 0. 2. Do tính chất ngẫu nhiên của thuật toán, rất có thể là biểu đồ chính xác mà bạn nhận được khác với biểu đồ được tạo khi tôi viết hướng dẫn này, do đó các giá trị ở trên trong bản tóm tắt sẽ không khớp với các giá trị bạn nhận được. Điều này là bình thường và dự kiến. Ngay cả khi bạn tạo hai biểu đồ ngẫu nhiên hình học trên cùng một máy, chúng sẽ khác nhau đối với cùng một bộ thông số.

>>> import igraph
>>> print igraph.__version__
0.6
6

đẳng cấu[] cho bạn biết hai đồ thị có đẳng cấu hay không. Nói chung, có thể mất khá nhiều thời gian, đặc biệt là đối với các đồ thị lớn, nhưng trong trường hợp của chúng tôi, câu trả lời có thể nhanh chóng được đưa ra bằng cách kiểm tra phân phối bậc của hai đồ thị.

Thiết lập và truy xuất thuộc tính¶

igraph sử dụng ID đỉnh và cạnh trong lõi của nó. Các ID này là số nguyên, bắt đầu từ 0 và chúng luôn liên tục tại bất kỳ thời điểm cụ thể nào trong suốt thời gian tồn tại của biểu đồ. Điều này có nghĩa là bất cứ khi nào các đỉnh và cạnh bị xóa, một tập hợp lớn các ID cạnh và có thể cả ID đỉnh sẽ được đánh số lại để đảm bảo tính liên tục. Bây giờ, giả sử rằng biểu đồ của chúng ta là một mạng xã hội nơi các đỉnh biểu thị con người và các cạnh biểu thị các kết nối xã hội giữa họ. Một cách để duy trì liên kết giữa ID đỉnh và giả sử, tên tương ứng là có một danh sách Python bổ sung ánh xạ từ ID đỉnh sang tên. Hạn chế của phương pháp này là danh sách bổ sung này phải được duy trì song song với các sửa đổi của biểu đồ gốc. May mắn thay, igraph biết khái niệm thuộc tính, tôi. e. , các đối tượng phụ trợ được liên kết với một đỉnh hoặc cạnh nhất định của biểu đồ hoặc thậm chí với toàn bộ biểu đồ. Mỗi igraph Graph , đỉnh và cạnh hoạt động như một từ điển Python tiêu chuẩn theo một nghĩa nào đó. bạn có thể thêm các cặp khóa-giá trị vào bất kỳ cặp nào trong số chúng, với khóa đại diện cho tên thuộc tính của bạn [hạn chế duy nhất là nó phải là một chuỗi] và giá trị đại diện cho chính thuộc tính đó.

Cảnh báo

Các thuộc tính có thể là các đối tượng Python tùy ý, nhưng nếu bạn đang lưu biểu đồ vào một tệp, thì chỉ các thuộc tính chuỗi và số sẽ được giữ lại. Xem mô-đun pickle trong thư viện Python tiêu chuẩn nếu bạn đang tìm cách lưu các loại thuộc tính khác. Bạn có thể chọn từng thuộc tính của mình, lưu trữ dưới dạng chuỗi và lưu chúng hoặc bạn có thể chọn toàn bộ Biểu đồ nếu bạn biết rằng bạn muốn tải .

Hãy để chúng tôi tạo một mạng xã hội tưởng tượng đơn giản theo cách thông thường bằng tay

>>> import igraph
>>> print igraph.__version__
0.6
7

Bây giờ, giả sử rằng chúng tôi muốn lưu trữ tên, tuổi và giới tính của những người trong mạng này dưới dạng thuộc tính đỉnh và đối với mọi kết nối, chúng tôi muốn lưu trữ xem đây là mối quan hệ bạn bè thân mật hay mối quan hệ chính thức. Mỗi đối tượng Graph chứa hai thành viên đặc biệt được gọi là vses, standing for the sequence of all vertices and all edges, respectively. If you try to use vs hoặc es làm từ điển Python, bạn .

>>> import igraph
>>> print igraph.__version__
0.6
8

Bất cứ khi nào bạn sử dụng vs hoặc es làm từ điển . Tuy nhiên, bạn chỉ có thể thay đổi thuộc tính của các đỉnh và cạnh riêng lẻ bằng cách lập chỉ mục vs hoặc es with integers as if they were lists [remember, they are sequences, they contain all the vertices or all the edges]. When you index them, you obtain a Vertex hoặc Edge , trong đó . Các đối tượng VertexEdge cũng có thể được sử dụng làm từ điển để thay đổi các thuộc tính .

>>> import igraph
>>> print igraph.__version__
0.6
9

Đoạn mã trên minh họa rằng việc lập chỉ mục đối tượng EdgeSeq trả về Edge objects; the representation above shows the graph the object belongs to, the edge ID [zero in our case] and the dictionary of attributes assigned to that edge. Edge cũng có một số thuộc tính hữu ích. thuộc tính source cung cấp cho bạn đỉnh nguồn của cạnh đó, đích cung cấp . Các phiên bản index gives you the corresponding edge ID, tuple gives you a tuple containing the source and target vertices and attributes[] gives you a dictionary containing the attributes of this edge. Vertex chỉ có chỉ mụcattributes[].

Đồ thị. es luôn đại diện cho tất cả các cạnh trong biểu đồ, lập chỉ mục cho nó theo i sẽ luôn trả về cạnh có ID i và tất nhiên điều tương tự cũng áp dụng cho Đồ thị. so với . Tuy nhiên, hãy nhớ rằng một đối tượng EdgeSeq nói chung không nhất thiết phải đại diện cho toàn bộ chuỗi cạnh của biểu đồ; . Nhưng trước khi đi sâu vào vấn đề đó, hãy xem cách chúng ta có thể gán các thuộc tính cho toàn bộ biểu đồ. Không quá ngạc nhiên, bản thân các đối tượng EdgeSeq objects and return other EdgeSeq objects that are restricted to a subset of edges, and of course the same applies to VertexSeq objects. But before we dive into that, let’s see how we can assign attributes to the whole graph. Not too surprisingly, Graph cũng có thể hoạt động như một từ điển.

>>> from igraph import *
0

Cuối cùng, cần đề cập rằng các thuộc tính có thể bị xóa bởi từ khóa Python del giống như bạn làm với bất kỳ thành viên nào của một tổ chức thông thường. .

>>> from igraph import *
1

Thuộc tính cấu trúc của đồ thị¶

Bên cạnh các quy trình thao tác thuộc tính và biểu đồ đơn giản được mô tả ở trên, igraph cung cấp một tập hợp lớn các phương thức để tính toán các thuộc tính cấu trúc khác nhau của biểu đồ. Việc ghi lại tất cả chúng nằm ngoài phạm vi của hướng dẫn này, do đó phần này sẽ chỉ giới thiệu một vài trong số chúng với mục đích minh họa. Chúng tôi sẽ làm việc trên mạng xã hội nhỏ mà chúng tôi đã xây dựng trong phần trước

Có lẽ thuộc tính đơn giản nhất mà người ta có thể nghĩ đến là bậc đỉnh. Bậc của một đỉnh bằng số cạnh kề với nó. Trong trường hợp mạng có hướng, chúng ta cũng có thể xác định theo độ [số cạnh hướng tới đỉnh] và độ ngoài [số cạnh xuất phát từ đỉnh]. igraph có thể tính toán tất cả chúng bằng một cú pháp đơn giản

>>> from igraph import *
2

Nếu đồ thị có hướng, chúng ta có thể tính toán riêng biệt độ vào và độ ra bằng cách sử dụng g. độ[type="in"]g. độ[type="out"] . Bạn cũng có thể chuyển một ID đỉnh hoặc danh sách ID đỉnh cho độ[] nếu bạn chỉ muốn tính độ cho một tập hợp con các đỉnh.

>>> from igraph import *
3

Quy ước gọi này áp dụng cho hầu hết các thuộc tính cấu trúc mà igraph có thể tính toán. Đối với các thuộc tính đỉnh, các phương thức chấp nhận ID đỉnh hoặc danh sách ID đỉnh [và nếu chúng bị bỏ qua, mặc định là tập hợp tất cả các đỉnh]. Đối với thuộc tính cạnh, các phương thức chấp nhận một ID cạnh duy nhất hoặc danh sách ID cạnh. Thay vì danh sách ID, bạn cũng có thể cung cấp VertexSeq hoặc EdgeSeq instance appropriately. Later in the next chapter, you will learn how to restrict them to exactly the vertices or edges you want.

Ghi chú

Đối với một số biện pháp, sẽ không hợp lý nếu chỉ tính toán chúng cho một vài đỉnh hoặc cạnh thay vì toàn bộ biểu đồ, vì dù sao thì cũng sẽ mất thời gian như vậy. Trong trường hợp này, các phương thức sẽ không chấp nhận ID đỉnh hoặc cạnh, nhưng bạn vẫn có thể hạn chế danh sách kết quả sau này bằng cách sử dụng toán tử lập chỉ mục và cắt danh sách tiêu chuẩn. Một ví dụ như vậy là tính trung tâm của véc tơ riêng [ Graph. evcent[] ].

Bên cạnh độ, igraph còn bao gồm các quy trình tích hợp sẵn để tính toán nhiều thuộc tính trung tâm khác, bao gồm độ giữa của đỉnh và cạnh [ Graph. khoảng cách[] , Đồ thị. edge_betweenness[] ] hoặc PageRank của Google [ Graph. pagerank[] ] chỉ để nêu tên một số. Ở đây chúng tôi chỉ minh họa cạnh giữa.

>>> from igraph import *
4

Bây giờ chúng ta cũng có thể tìm ra kết nối nào có tính trung tâm giữa cao nhất với một số phép thuật Python

>>> from igraph import *
5

Truy vấn đỉnh và cạnh dựa trên thuộc tính¶

Hãy tưởng tượng rằng trong một mạng xã hội nhất định, bạn muốn tìm ra ai có mức độ trung tâm cao nhất hoặc giữa. Bạn có thể làm điều đó với các công cụ được trình bày cho đến nay và một số kiến ​​thức cơ bản về Python, nhưng vì nhiệm vụ phổ biến là chọn các đỉnh và cạnh dựa trên các thuộc tính hoặc thuộc tính cấu trúc, igraph cung cấp cho bạn một cách dễ dàng hơn để thực hiện điều đó

>>> from igraph import *
6

Cú pháp thoạt nhìn có vẻ hơi khó xử, vì vậy hãy cố gắng diễn giải nó từng bước một. select[] là một phương thức của VertexSeq và mục đích duy nhất của nó là . Cách nó lọc các đỉnh phụ thuộc vào các đối số từ khóa và vị trí của nó. Các đối số vị trí [những đối số không có tên rõ ràng như VertexSeq based on the properties of individual vertices. The way it filters the vertices depends on its positional and keyword arguments. Positional arguments [the ones without an explicit name like _độ ở trên] luôn được xử lý trước các đối số từ khóa như sau.

  • Nếu đối số vị trí đầu tiên là Không có , một chuỗi trống [không chứa đỉnh] sẽ được trả về.

    >>> from igraph import *
    
    7

  • Nếu đối số vị trí đầu tiên là một đối tượng có thể gọi được [i. e. , một hàm, một phương thức liên kết hoặc bất kỳ thứ gì hoạt động giống như một hàm], đối tượng sẽ được gọi cho mọi đỉnh hiện có trong chuỗi. Nếu hàm trả về True thì đỉnh đó sẽ được đưa vào, ngược lại sẽ bị loại trừ.

    >>> from igraph import *
    
    8

  • Nếu đối số vị trí đầu tiên là một đối số có thể lặp lại [i. e. , danh sách, trình tạo hoặc bất kỳ thứ gì có thể được lặp lại], nó phải trả về số nguyên và những số nguyên này sẽ được coi là chỉ số trong tập hợp đỉnh hiện tại [không nhất thiết phải là toàn bộ biểu đồ]. Chỉ những đỉnh khớp với các chỉ số đã cho mới được đưa vào tập đỉnh đã lọc. Phao, chuỗi, ID đỉnh không hợp lệ sẽ âm thầm bị bỏ qua

    >>> from igraph import *
    
    9

  • Nếu đối số vị trí đầu tiên là một số nguyên, thì tất cả các đối số còn lại cũng được coi là số nguyên và chúng được hiểu là các chỉ số trong tập hợp đỉnh hiện tại. Đây chỉ là đường cú pháp, bạn có thể đạt được hiệu ứng tương đương bằng cách chuyển một danh sách làm đối số vị trí đầu tiên, nhưng theo cách này, bạn có thể bỏ qua dấu ngoặc vuông

    $ igraph
    No configuration file, using defaults
    igraph 0.6 running inside Python 2.5.1 [r251:54863, Apr 15 2008, 22:57:26]
    Type "copyright", "credits" or "license" for more information.
    >>>
    0

Đối số từ khóa có thể được sử dụng để lọc các đỉnh dựa trên thuộc tính hoặc thuộc tính cấu trúc của chúng. Tên của mỗi đối số từ khóa phải bao gồm tối đa hai phần. tên của thuộc tính hoặc thuộc tính cấu trúc và toán tử lọc. Toán tử có thể được bỏ qua; . Các khả năng như sau [trong đó tên biểu thị tên của thuộc tính hoặc thuộc tính]

Ý nghĩa của đối số từ khóa tên_eq Giá trị thuộc tính/thuộc tính phải bằng giá trị của đối số từ khóa name_neThe attribute/property value must not be equal to the value of the keyword argumentname_ltThe attribute/property value must be less than the value of the keyword argumentname_leThe attribute/property value must be less than or equal to the value of the keyword argumentname_gtThe attribute/property value must be greater than the value of the keyword argumentname_geThe attribute/property value must be greater than or equal to the value of the keyword argumentname_inThe attribute/property value must be included in the value of the keyword argument, which must be a sequence in this casename_notinThe attribute/property value must not be included in the value of the the keyword argument, which must be a sequence in this case

Chẳng hạn, lệnh sau cung cấp cho bạn những người dưới 30 tuổi trong mạng xã hội tưởng tượng của chúng tôi

$ igraph
No configuration file, using defaults
igraph 0.6 running inside Python 2.5.1 [r251:54863, Apr 15 2008, 22:57:26]
Type "copyright", "credits" or "license" for more information.
>>>
1

Ghi chú

Do các ràng buộc về cú pháp của Python, bạn không thể sử dụng cú pháp được thừa nhận là đơn giản hơn của g. so với. select[age >>2

Về mặt lý thuyết, có thể tồn tại một thuộc tính và một thuộc tính cấu trúc có cùng tên [e. g. , bạn có thể có thuộc tính đỉnh có tên độ ]. Trong trường hợp đó, chúng tôi sẽ không thể quyết định xem người dùng muốn định nghĩa độ là thuộc tính cấu trúc hay là thuộc tính đỉnh. Để giải quyết sự mơ hồ này, tên thuộc tính cấu trúc phải luôn được đặt trước dấu gạch dưới [ _ ] khi được sử dụng để lọc. Ví dụ, để tìm các đỉnh có bậc lớn hơn 2.

$ igraph
No configuration file, using defaults
igraph 0.6 running inside Python 2.5.1 [r251:54863, Apr 15 2008, 22:57:26]
Type "copyright", "credits" or "license" for more information.
>>>
3

Có hai thuộc tính cấu trúc đặc biệt để chọn các cạnh. sử dụng _source hoặc _from trong danh sách đối số từ khóa của EdgeSeq.select[] lọc dựa trên đỉnh nguồn của các cạnh, trong khi _target_ hoặc _to filters based on the target vertices.

Bố cục và vẽ đồ thị¶

Đồ thị là một đối tượng toán học trừu tượng không có biểu diễn cụ thể trong không gian 2D hoặc 3D. Điều này có nghĩa là bất cứ khi nào chúng ta muốn trực quan hóa một đồ thị, trước tiên chúng ta phải tìm một ánh xạ từ các đỉnh đến tọa độ trong không gian hai hoặc ba chiều, tốt nhất là theo cách dễ nhìn. Một nhánh riêng của lý thuyết đồ thị, cụ thể là vẽ đồ thị, cố gắng giải quyết vấn đề này thông qua một số thuật toán bố cục đồ thị. igraph thực hiện khá nhiều thuật toán bố cục và cũng có thể vẽ chúng lên màn hình hoặc vào tệp PDF, PNG hoặc SVG bằng thư viện Cairo

Quan trọng

Để làm theo các ví dụ của tiểu mục này, bạn cần có các ràng buộc Python của thư viện Cairo. Chương trước [Cài đặt igraph] cho bạn biết thêm về cách cài đặt các liên kết Python của Cairo

Thuật toán bố cục¶

Các phương thức bố cục trong igraph được tìm thấy trong đối tượng Graph và chúng luôn bắt đầu bằng layout_. The following table summarises them:

Tên phương thứcTên ngắnMô tả thuật toán layout_circlecircle , circle>>4

Đối số đầu tiên của phương thức layout[] phải là tên viết tắt của thuật toán bố cục [xem bảng ở trên]. Tất cả các đối số từ khóa và vị trí còn lại được chuyển nguyên vẹn cho phương thức bố cục đã chọn. Chẳng hạn, hai cuộc gọi sau đây là hoàn toàn tương đương.

$ igraph
No configuration file, using defaults
igraph 0.6 running inside Python 2.5.1 [r251:54863, Apr 15 2008, 22:57:26]
Type "copyright", "credits" or "license" for more information.
>>>
5

Các phương thức bố cục trả về một đối tượng Bố cục hoạt động gần giống như một danh sách các danh sách. Mỗi mục danh sách trong đối tượng Bố cục tương ứng với một đỉnh trong biểu đồ gốc và chứa tọa độ đỉnh trong không gian 2D hoặc 3D. Các đối tượng Bố cục cũng chứa một số phương thức hữu ích để dịch, chia tỷ lệ hoặc xoay tọa độ theo lô. Tuy nhiên, tiện ích chính của các đối tượng Layout là bạn có thể chuyển chúng vào plot[] function along with the graph to obtain a 2D drawing.

Vẽ biểu đồ bằng bố cục¶

Chẳng hạn, chúng ta có thể vẽ sơ đồ mạng xã hội tưởng tượng của mình bằng thuật toán bố cục Kamada-Kawai như sau

$ igraph
No configuration file, using defaults
igraph 0.6 running inside Python 2.5.1 [r251:54863, Apr 15 2008, 22:57:26]
Type "copyright", "credits" or "license" for more information.
>>>
6

Thao tác này sẽ mở một trình xem hình ảnh bên ngoài hiển thị hình ảnh đại diện trực quan của mạng, giống như hình trên hình dưới đây

Mạng xã hội của chúng tôi với thuật toán bố cục Kamada-Kawai

Hmm, cái này không đẹp lắm cho đến giờ. Một bổ sung tầm thường sẽ là sử dụng tên làm nhãn đỉnh và tô màu các đỉnh theo giới tính. Nhãn đỉnh được lấy từ thuộc tính nhãn theo mặc định và màu của đỉnh được xác định bởi color attribute, so we can simply create these attributes and re-plot the graph:

$ igraph
No configuration file, using defaults
igraph 0.6 running inside Python 2.5.1 [r251:54863, Apr 15 2008, 22:57:26]
Type "copyright", "credits" or "license" for more information.
>>>
7

Lưu ý rằng chúng tôi chỉ đơn giản là sử dụng lại đối tượng bố cục trước đó ở đây, nhưng chúng tôi cũng chỉ định rằng chúng tôi cần một ô nhỏ hơn [300 x 300 pixel] và lề lớn hơn xung quanh biểu đồ để vừa với các nhãn [20 pixel]. Kết quả là

Mạng xã hội của chúng tôi - với tên là nhãn và giới tính là màu sắc

Thay vì chỉ định thuộc tính hình ảnh là thuộc tính đỉnh và cạnh, bạn cũng có thể đặt chúng làm đối số từ khóa cho plot[] .

$ igraph
No configuration file, using defaults
igraph 0.6 running inside Python 2.5.1 [r251:54863, Apr 15 2008, 22:57:26]
Type "copyright", "credits" or "license" for more information.
>>>
8

Phương pháp sau này được ưu tiên nếu bạn muốn giữ các thuộc tính của biểu diễn trực quan của biểu đồ của bạn tách biệt với chính biểu đồ đó. Bạn có thể chỉ cần thiết lập một từ điển Python chứa các đối số từ khóa mà bạn sẽ chuyển đến plot[] và sau đó sử dụng dấu hoa thị kép [ **] operator to pass your specific styling attributes to plot[]:

$ igraph
No configuration file, using defaults
igraph 0.6 running inside Python 2.5.1 [r251:54863, Apr 15 2008, 22:57:26]
Type "copyright", "credits" or "license" for more information.
>>>
9

Cốt truyện cuối cùng cho thấy các mối quan hệ chính thức với các đường kẻ dày trong khi các mối quan hệ không chính thức với các đường mảnh

Mạng xã hội của chúng tôi - cũng cho thấy mối quan hệ nào là chính thức

Tóm lại tất cả. có các thuộc tính đỉnh và cạnh đặc biệt tương ứng với biểu diễn trực quan của biểu đồ. Các thuộc tính này ghi đè cài đặt mặc định của igraph [xem cấu hình-igraph để ghi đè cài đặt mặc định trên toàn hệ thống]. Hơn nữa, các đối số từ khóa thích hợp được cung cấp cho plot[] sẽ ghi đè các thuộc tính trực quan được cung cấp bởi các thuộc tính đỉnh và cạnh. Hai bảng sau đây tóm tắt các thuộc tính trực quan được sử dụng thường xuyên nhất cho các đỉnh và các cạnh, tương ứng.

Các thuộc tính đỉnh kiểm soát các biểu đồ đồ thị¶

Tên thuộc tính Đối số từ khóa Mục đích màu sắcvertex_color Màu của đỉnh . Đây là một góc tính bằng radian, với số 0 thuộc về phía bên phải của đỉnh. vertex_labelLabel of the vertexlabel_anglevertex_label_angleThe placement of the vertex label on the circle around the vertex. This is an angle in radians, with zero belonging to the right side of the vertex.label_colorvertex_label_color Màu của nhãn đỉnh label_distvertex_label_distDistance of the vertex label from the vertex itself, relative to the vertex sizelabel_sizevertex_label_sizeFont size of the vertex labelshapevertex_shapeShape of the vertex. Known shapes are: hình chữ nhật , hình tròn , ẩn . Một số bí danh cũng được chấp nhận, xem , triangle-up, triangle-down. Several aliases are also accepted, see drawing. known_shapes . sizevertex_size Kích thước của đỉnh tính bằng pixel

Các thuộc tính cạnh kiểm soát các biểu đồ đồ thị¶

Tên thuộc tính Đối số từ khóa Mục đích màu sắcedge_color Màu của cạnh . edge_arrow_sizeSize [length] of the arrowhead on the edge if the graph is directed, relative to 15 pixels.arrow_widthedge_arrow_width Chiều rộng của đầu mũi tên trên cạnh nếu biểu đồ có hướng, tương ứng với 10 pixel. chiều rộngedge_width Chiều rộng của cạnh tính bằng pixel

Chỉ định màu sắc trong các ô¶

igraph hiểu các thông số kỹ thuật màu sau bất cứ nơi nào nó mong đợi một màu [e. g. , cạnh, đỉnh hoặc màu nhãn trong các thuộc tính tương ứng]

Tên màu X11Xem danh sách tên màu X11 trong Wikipedia để biết danh sách đầy đủ. Đặc tả màu trong cú pháp CSS

Đây là một chuỗi theo một trong các định dạng sau [trong đó R, G và B lần lượt biểu thị các thành phần màu đỏ, xanh lá cây và xanh dương]

  • #RRGGBB , các thành phần nằm trong khoảng từ 0 đến 255 ở định dạng thập lục phân. Ví dụ. "#0088ff" .
  • #RGB , các thành phần nằm trong khoảng từ 0 đến 15 ở định dạng thập lục phân. Ví dụ. "#08f" .
  • rgb[R, G, B] , các thành phần nằm trong khoảng từ 0 đến 255 hoặc từ 0 . Ví dụ. "rgb[0, 127, 255]" hoặc "rgb[0%, 50%, 100%]".
Danh sách, bộ hoặc chuỗi giá trị RGB được phân tách bằng khoảng trắngVí dụ. [255, 128, 0] , [255, 128, 0] or "255, 128, 0".

Tiết kiệm lô¶

igraph có thể được sử dụng để tạo các biểu đồ có chất lượng xuất bản bằng cách yêu cầu hàm plot[] lưu biểu đồ vào một tệp thay vì hiển thị . Điều này có thể được thực hiện đơn giản bằng cách chuyển tên tệp đích làm đối số bổ sung sau chính biểu đồ. Định dạng ưa thích được suy ra từ phần mở rộng. igraph có thể lưu vào bất kỳ thứ gì được Cairo hỗ trợ, bao gồm các tệp SVG, PDF và PNG. Các tệp SVG hoặc PDF sau đó có thể được chuyển đổi thành PostScript [ . ps ] hoặc PostScript đóng gói [ . eps ] nếu bạn muốn, trong khi các tệp PNG có thể được chuyển đổi thành TIF [ . tif ].

>>> g = Graph[1]
0

igraph và thế giới bên ngoài¶

Không có mô-đun đồ thị nào hoàn chỉnh nếu không có một số loại chức năng nhập/xuất cho phép gói giao tiếp với các chương trình và bộ công cụ bên ngoài. igraph cũng không ngoại lệ. nó cung cấp các chức năng để đọc các định dạng biểu đồ phổ biến nhất và để lưu các đối tượng Graph vào các tệp tuân theo các đặc tả định dạng này. Bảng sau đây tóm tắt các định dạng mà igraph có thể đọc hoặc ghi.

Định dạngTên viết tắtPhương thức đọcPhương thức ghiDanh sách liền kề lglBiểu đồ. Read_Lgl[]Đồ thị. write_lgl[] [a. k. a. LGL]   Ma trận kề ma trận kềĐồ thị. Read_Adjacency[]Đồ thị. write_adjacency[] DIMACS dimacGraph. Read_DIMACS[]Đồ thị. write_dimacs[] Danh sách cạnh danh sách cạnh , các cạnh, edgeGraph.Read_Edgelist[]Đồ thị. write_edgelist[] GraphViz graphviz , chấmnot supported yetGraph.write_dot[] GML gmlGraph. Read_GML[]Đồ thị. write_gml[] GraphML graphmlGraph. Read_GraphML[]Biểu đồ. write_graphml[] Gzipped GraphML graphmlzGraph. Read_GraphMLz[]Đồ thị. write_graphmlz[] Danh sách cạnh được gắn nhãn ncolGraph. Read_Ncol[]Đồ thị. write_ncol[] [a. k. a. NCOL]   Định dạng pajek pajek , netGraph. Read_Pajek[]Đồ thị. write_pajek[] Đồ thị ngâm đồ chuaĐồ thị. Read_Pickle[]Đồ thị. write_pickle[]

Như một bài tập, hãy tải xuống biểu đồ biểu diễn của câu lạc bộ karate nổi tiếng Zachary, lưu nó vào một thư mục và thử tải nó vào igraph. Vì đây là tệp mạng Pajek, bạn phải sử dụng phương pháp trình đọc Pajek từ bảng trên [đảm bảo bạn sử dụng đường dẫn thích hợp đến tệp đã tải xuống]

>>> g = Graph[1]
1

Nếu bạn muốn chuyển đổi cùng một biểu đồ thành GraphML, bạn có thể thực hiện điều đó bằng phương pháp ghi GraphML từ bảng trên

>>> g = Graph[1]
2

Ghi chú

Hầu hết các định dạng đều có giới hạn riêng; . Đặt cược tốt nhất của bạn có lẽ là GraphML hoặc GML nếu bạn muốn lưu biểu đồ igraph ở định dạng có thể đọc được từ gói bên ngoài và bạn muốn giữ nguyên các thuộc tính số và chuỗi. Danh sách cạnh và NCOL cũng được nếu bạn không có thuộc tính [tuy nhiên, NCOL hỗ trợ tên đỉnh và trọng số cạnh]. Nếu bạn không muốn sử dụng biểu đồ của mình bên ngoài igraph nhưng bạn muốn lưu trữ chúng cho phiên sau, định dạng biểu đồ chọn lọc đảm bảo rằng bạn sẽ nhận lại chính xác cùng một biểu đồ. Định dạng đồ thị pickle sử dụng mô-đun pickle của Python để lưu trữ và đọc đồ thị.

Cũng có hai phương thức trợ giúp. load[] là điểm vào chung cho các phương thức trình đọc cố gắng suy ra định dạng phù hợp từ phần mở rộng tệp. Đồ thị. save[] ngược lại với load[] . nó cho phép bạn lưu biểu đồ trong đó định dạng ưa thích lại được suy ra từ tiện ích mở rộng. Phát hiện định dạng của load[]Graph. save[] có thể bị ghi đè bởi đối số từ khóa format chấp nhận tên ngắn của các định dạng từ bảng trên.

>>> g = Graph[1]
3

Đi đâu tiếp theo¶

Hướng dẫn này mới chỉ là phần nổi của những gì igraph có thể làm. Các kế hoạch dài hạn của tôi là mở rộng hướng dẫn này thành tài liệu kiểu thủ công thích hợp để igraph trong các chương tiếp theo. Trong thời gian chờ đợi, hãy xem tài liệu API đầy đủ sẽ cung cấp thông tin về hầu hết mọi lớp, chức năng hoặc phương thức igraph. Một điểm khởi đầu tốt là tài liệu của lớp Graph. Nếu bạn gặp khó khăn, hãy gửi thư vào danh sách gửi thư của igraph - có thể có ai đó có thể giúp bạn ngay lập tức

Chủ Đề