If you are interested in a research internship around Network Science, check The projects I propose.

Complex Networks - Network Science - 2023/2024

Introduction
This is the page of the Complex Networks course at ENS de Lyon., in the Complex System option

The class covers: 1)Fundamentals of Network Science, e.g., Classic random models, centralities, small-world phenomenon, etc. 2)Focus classes on advances topics, e.g., dynamic networks, graph algorithmic, community detection. Teachers for lectures are Rémy Cazabet and Pierre Borgnat. Practicals are independently teached by Juliana Du.

Objectives
This class is thought to provide a broad overview of current topics in Network Science. It is grounded in research. The objective of the course is to lead the students to a point where they are able to gain a general understanding of most articles currently published in the field.

Overview of the course
There are 24h of lectures and 8h of practicals. The lectures by me (Rémy Cazabet) are divided in 4 parts of 4h each, composed of 2 hours of lectures and 2 hours of experiments. The practicals are done in python, using notebooks. The course is given in English, unless all students are French speakers.


Program, classes and content

Below is an overview of the courses and practicals. As the classes are done, I'll add my presentation slides, cheatsheets, some notebooks, etc.
This organization can be subject to changes !

Day Time Room Teacher Topic Resources
Thursday Sep. 14 13h30-15h30 F Rémy Cazabet Lecture: Introduction, Describing Networks, Centralities CheatSheet_intro - CheatSheet_matrices - CheatSheet_centralities - Slides
Thursday Sep.21 10h15-12h15 F Rémy Cazabet Experiments: Gephi, networkx intro TP1 - TP2
Thursday Sep.28 10h15-12h15 F Rémy Cazabet Lecture: Random Graphs Lecture - CheatSheet_RandomGraphs - CheatSheet_ScaleFree - CheatSheet_Spatial
Thursday Oct. 5 10h15-12h15 F Rémy Cazabet Experiments: Random Graphs TP
Thursday Oct. 12 10h15-12h15F Pierre Borgnat Spreading processes ; Dynamic on networks
Thursday Oct. 19 10h15-12h15F Pierre Borgnat Graph Signal processing
Thursday Oct. 26 10h15-12h15F Rémy Cazabet Lecture: Communities + ML classic Lecture
CheatSheet communities
CheatSheet Machine Learning
Thursday Nov. 9 - Déplacé 15h45-17h45F Pierre Borgnat Representation Learning for graphs ; embeddings
Thursday Nov. 16 15h45-17h45F Rémy Cazabet Experiments: Communities TP communities
Thursday Nov. 23 15h45-17h45F Rémy Cazabet Lecture: Dynamic of Networks + dynamic communities Lecture
CheatSheet Dynamic
Thursday Nov. 30 15h45-17h45M1 105 Rémy Cazabet Experiments: Dynamic of networks TP temporal
Thursday Dec. 7 15h45-17h45M1 103 Rémy Cazabet Graph Convolutional Networks Lecture


Day Time Room Teacher Topic Resources
Thursday Oct. 19 8h00-10h00 F Juliana Du Practicals + Project Scientometrics practicals
Tuesday Nov. 28 8h00-10h00 F Juliana Du Project Project
Tuesday Dec. 5 8h00-10h00 M1 103 Juliana Du Project
Tuesday Dec. 12 8h00-10h00 M1 105 Juliana Du GNN + project Code example

TP
  • A toy dataset of student friendship network Download
  • An airport dataset with approximate population of the airport city Download


Networks


Small networks
Small network Game Of Thrones(.graphml)
Airports with location and country(.graphml)

Dataset collections
There are many network dataset repositories available on the web, here is for instance a collection of collection of networks: network-datasets
A recent addition to this list is Netzschleuder repository, which has the advantage of allowing to load a graph directly from its name. Here is a minimal working example, to load the openflights dataset:

from io import BytesIO
from zipfile import ZipFile
from urllib.request import urlopen
address="https://networks.skewed.de/net/openflights/files/openflights.csv.zip"
resp=urlopen(address)
zipfile = ZipFile(BytesIO(resp.read()))
strf=zipfile.read("edges.csv").decode().split("\n")
g= nx.parse_edgelist(strf,delimiter=",",data=False)

More generally, if you want to find data of interest, I provide here some tips to find them.

Tools

For tutorials and the experimental part of lectures, you need to use some softwares, detailed below.

Gephi

Gephi is a software for basic graph manipulation and visualization. Although you can't do much in term of graph analysis, it is really convenient to explore and visualize graphs of small to medium size ( < 1000 nodes).
It can be donwloaded there : Gephi.

Python

Most of the experiments are done in python. If you're not familiar with this language, there are numerous tutorials on the web. A good one for instance is from w3schools. You don't need to install anything, since you can do all the experiments using an online notebook such as Google colab. If you prefer to use a local installation on your computer, here is a list of packages we will use. Note that some of them are only available with pip, and not anaconda. If you're using anaconda, you can neverthless use them, using the pip command (pip install package_name).
  • networkx. Generic network analysis
  • notebook. Jupyter notebook
  • cdlib. Community detection
  • tnetwork. Temporal networks
  • scikit-learn. Machine learning/Data mining
  • seaborn. ploting library

Exams

There will be two grades given in this class:
  • A network analysis project. Send before December 17, 23h59. (40%)
  • The description of the project is available there: Project
    You can work in groups of 2 or 3 students. You must clarify what each student has done (graes can be personnalized).
    You can find some examples of previous years' projects there. (Please send your project as a notebook, I converted them here as PDF for convenience)
  • A final Exam (January 6, 60%). All documents allowed (no computers). This exam covers classes by all teachers. You can find the exam of the previous year there. Note that the program was not exactly the same, but it gives an idea of the kind of questions you can have on my part.