The area of complex network analysis has had some significant advancements in the latest years and has allowed us to learn much more about how several systems work.

Complex networks are systems composed of interacting entities. Some examples of real-world complex networks are social networks, supply chains, protein interactions, and electrical grid infrastructure.

Press + to interact
An example of a complex network
An example of a complex network

The techniques from complex network analysis can be applied to these networks to answer questions like which power substation is the most vulnerable to an attack, what is the shortest path between two airports, how an epidemic will spread in a given population, and so on.

In this course, we’ll cover the basics of analyzing graphs and complex networks.

The prerequisites for this course

The necessary prerequisites for this course are:

  • Knowledge of Python 3 programming language

  • Knowledge of list comprehension and data structures

  • Knowledge of probability and basic statistics

  • Knowledge of discrete mathematics basic concepts

The following knowledge is not required but can help you better understand the course:

  • Linear algebra

  • Machine learning

Syllabus

This course will point to several aspects of complex network analysis. It goes from a basic introduction to what complex networks are and basic important metrics to more advanced metrics like community detection, link prediction, and embedding methodologies.

Introduction to graphs and complex networks

In this section, we’ll learn what graphs are and what we can represent with them. We’ll see several examples and define different types of graphs, such as weighted graphs, directed graphs, bipartite graphs, directed acyclic graphs (DAGs), and trees.

Also, we’ll learn about random graphs and how they relate to graphs and complex networks. We’ll learn how to differentiate a complex network from a graph and will look at how to analyze graphs and complex networks using the NetworkX Python package.

Graphs and complex networks in Python

In the second section, we’ll dive deeper into the NetworkX Python package for network analysis. We’ll learn how to define different graph types with it and how to represent those graphs in different ways, such as edge lists and adjacency matrices. We’ll also learn how to plot these graphs and how to share them using files.

Complex networks measurements

This section will be all about extracting metrics from the networks we’re studying to help us characterize how they work and why.

We’ll learn to assess, using numbers, if a network has hubs, nodes connected to a lot of other nodes, or if it generates clusters of nodes. We’ll know if the nodes are closer to each other or far apart. We’ll also learn to identify if a node is more central, important, or influential than the others.

Random graphs and complex network models

In this section, we’ll learn about some already available complex network models with well-defined characteristics that can represent real-world networks and help us study how they work.

We’ll explore small-world networks and the six degrees of separation. We’ll learn about scale-free networks and how they relate to the World Wide Web. Finally, we will see how to generate those models using the NetworkX library.

Community detection in complex networks

How do we find nodes that are closely connected to each other but not to the remainder of the network? This is what this section is going to be about.

We’ll learn two cool algorithms to find communities, or clusters, of nodes inside a network. This will be a starting point for machine learning algorithms in complex networks. This introduction will get us going with some basic tools to assess this kind of structure when needed.

Node similarity in complex networks

This section will talk about how we can compare two nodes to assess how similar they are. We first need to define what we mean by similarity, and once this is done, we need to find a way of calculating it.

This opens up a toolbox for us where we can find nodes that are much alike and that allows us to infer how one of them is going to behave, given we know how others behave.

Walks in complex networks

Walks are an important aspect of network analysis. In this section, we’ll learn how we can generate walks in complex networks in Python, what we can do with them to assess the topological structure we’re dealing with, and how we can estimate some dynamics on the network.

Complex network embeddings

Toward the end of the course, we’ll talk about embeddings. Embeddings are all about how we can convert the nodes in our network into vectors of numbers. When we have an embedding, we can calculate the distance between nodes and the correlation between them and also feed them to machine learning (ML) algorithms. This opens a lot of new tools that can be applied to our analysis.

This is going to be a long course, but by the end of it, we’ll have the tools required to start this exciting journey.