There will be 5 homework sets/laboratories for this class, each of which is in the form of a Colab notebook with programming/computational questions for you to get some hands-on training on network analysis of real-world data. At times there will be some optional analytical problems for extra credit. We will use the Python programming language for all laboratories in this course. As discussed in the first lecture of the semester, our expectation is that many of you will have some experience with Python and numpy. In case you need to catch up with this prerequisite knowledge, here is an excellent tutorial from Stanford's course on convolutional neural networks. The tutorial will serve as a quick crash course on both the Python programming language and its use for scientific computing using notebooks such as Colab.

The list of laboratories follows. You can refer to the end of this page for matters about logistics and the policy on grading and collaboration.

Laboratory 1 - Manipulating graphs, introduction to NetworkX and PyTorch Geometric

In this first laboratory we will work with a real dataset, generate a network graph and analyze it using the Python package NetworkX. We will also introduce pandas, an excellent library to load and process datasets efficiently. A third goal of this assigment is to start familiarizing ourselves with PyTorch Geometric, a library built upon PyTorch to easily write and train Graph Neural Networks (GNNs) for a wide range of applications related to network data. You are required to submit a report with your solutions (a single pdf file you will upload to Gradescope) including your answers and discussions, the Python code you developed as well as the corresponding outputs including figures. If you work on the (optional) analytical problem, as part of the report include a writeup of your solutions (typing is not mandatory). Due Wednesday February 8 via Gradescope.

Laboratory 2 - Descriptive analysis of network graph characteristics

Laboratory 3 - Models for network graphs and their applications

Laboratory 4 - Network topology inference

Laboratory 5 - Graph neural networks for recommendation systems


Specification of the deliverables will be clearly indicated in each assignment. Laboratories are typically due by Wednesdays as per the calendar above. I ask that you please make your best effort to meet the deadline. If you can't, for whatever reason, I have no problem granting extensions. That said, do not abuse that prerogative, if you are late once in the semester, that's OK. If you are late more than that you need to organize your time better.

All your solutions should be submitted via Gradescope. You should prepare and upload a report as a single pdf file with your answers to all questions in each laboratory (including the code you developed, outputs, plots, discussions, and whatever you deem relevant). For the coding parts of the assignments you should also include the printouts of scripts you prepared to run your simulations, as well as all plots that are requested (with clear axes labels, curve legends, figure caption, etc.). Please do not submit a copy of your Colab notebook (.ipynb), since we won't be running your code. Especially when it comes to answers of analytical (paper and pencil) questions, there is no need to type everything using LaTeX or a word processing software (of course you can type if you want). But whatever you hand in should be clear, readable, concise, and your arguments/logic well justified and articulated. For these few and often optional questions that involve mathematical derivations or explanations you can use e.g., a tablet (if you have one) to write your solutions and generate the pdf. Otherwise, you can scan your writeup. If you user your phone, I suggest you rely on a scanning App and avoid taking photos of your pages. Again, make sure to have everything in a single pdf file and that your name is written in the first page.

The class has a TA to help you out with the laboratories. The name of the TA is Narges. Her office hours can be found here.

Policy on grading and collaboration

Each of the 5 laboratoriescontributes 30/5=6% towards your final grade. The purpose of the laboratories is to help you in the learning process. Therefore, it is foolish of you and also unethical to hand in the solution of others as your own. While I am quite confident this will not be an issue, if you engage in unethical behavior you will get no points for the assignment and I will recommend that you drop the class and retake it next year. These cases will also be dealt with according to the University of Rochester's Academic Honesty Policy.

Going back to the topic of learning, collaboration with peers is allowed and encouraged. If you are struggling with the material, your classmates are possibly a more valuable resource than myself. If you are doing well in the class, there is no better use of your time than helping your peers. It is a very surprising fact of life that happiness is to be found when you give to someone, not when you receive from someone. Work on the laboratories and try to make progress. If you're stuck, go talk with a classmate. If you are still stuck go talk with your TA. Then come talk with me (though it is unlikely I will be able to help with coding questions); or do not hesitate to send me an email with a concrete question that I will reply within the day.