From d01e384412b1ddf9b25a3a591ed5550d420fc99c Mon Sep 17 00:00:00 2001 From: Huon Wilson Date: Fri, 1 May 2020 14:36:43 +1000 Subject: [PATCH 01/43] Replace demo READMEs with links to Read the Docs --- demos/README.md | 24 +-- demos/basics/README.md | 14 +- demos/calibration/README.md | 12 +- demos/community_detection/README.md | 26 +-- demos/connector/neo4j/README.md | 20 +- demos/embeddings/README.md | 49 ++--- demos/ensembles/README.md | 11 +- demos/graph-classification/README.md | 19 +- demos/interpretability/README.md | 27 +-- demos/link-prediction/README.md | 45 ++-- demos/link-prediction/attri2vec/README.md | 52 +---- demos/link-prediction/graphsage/README.md | 37 +--- demos/link-prediction/hinsage/README.md | 44 +--- demos/link-prediction/random-walks/README.md | 128 +----------- demos/node-classification/README.md | 59 ++---- demos/node-classification/attri2vec/README.md | 34 +--- demos/node-classification/gat/README.md | 27 +-- demos/node-classification/gcn/README.md | 17 +- demos/node-classification/graphsage/README.md | 41 +--- demos/node-classification/hinsage/README.md | 70 +------ demos/node-classification/node2vec/README.md | 25 +-- demos/node-classification/ppnp/README.md | 16 +- scripts/demo_table.py | 192 ++++++++++++------ 23 files changed, 285 insertions(+), 704 deletions(-) diff --git a/demos/README.md b/demos/README.md index 2420095c1..9ed682272 100644 --- a/demos/README.md +++ b/demos/README.md @@ -1,28 +1,12 @@ # StellarGraph demos + + -[StellarGraph](https://github.com/stellargraph/stellargraph) provides numerous algorithms for graph machine learning. This folder contains demos of all of them to explain how they work and how to use them as part of a TensorFlow Keras data science workflow. - -The demo notebooks can be run without any installation of Python by using Binder or Google Colab - these both provide a cloud-based notebook environment. The whole set of demos can be opened in Binder here: [![Open in Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/README.md) or you can click the Binder and Colab badges within each notebook. - -## Find algorithms for a task - -- Introduction to StellarGraph and its graph machine learning workflow (with TensorFlow and Keras): [**GCN on Cora**](node-classification/gcn/gcn-cora-node-classification-example.ipynb) -- Predicting attributes, such as classifying as a class or label, or regressing to calculate a continuous number: - - For nodes/vertices/entities: [**node classification**](./node-classification/README.md) - - For edges/links/connections: [**link prediction**](./link-prediction/README.md) (includes knowledge graph completion) - - For graphs/networks: [**graph classification**](./graph-classification/README.md) - - Adjusting predictions scores to be probabilities (for any model): [**calibration**](./calibration/README.md) - - Interpreting/introspecting models, for node classification: [**interpretability**](./interpretability/README.md) -- Representation learning or computing embedding vectors (including unsupervised tasks): - - For nodes/vertices/entities and edges/links/connections: [**embeddings**](./embeddings/README.md) (and [**community detection**](./community_detection/README.md) for using these to cluster nodes) -- Ensembling models to reduce prediction variance: [**ensembles**](./ensembles/README.md) -- Loading data into a `StellarGraph` object, with Pandas, Neo4j or NetworkX: [**basics**](./basics/README.md) -- Experimental: running GraphSAGE on data stored in Neo4j: [**neo4j connector**](./connector/neo4j/README.md) +These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/stable/demos/ -## Find a demo for an algorithm -(Hover for explanation of abbreviations.) + diff --git a/demos/basics/README.md b/demos/basics/README.md index 75034b250..6509b276e 100644 --- a/demos/basics/README.md +++ b/demos/basics/README.md @@ -1,11 +1,11 @@ # StellarGraph basics -[StellarGraph](https://github.com/stellargraph/stellargraph) has support for loading data via Pandas and NetworkX. This folder contains examples of the loading data into a `StellarGraph` object, which is the format used by the machine learning algorithms in this library. + + -## Find demos for a format +These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/stable/demos/basics/ -- [`loading-pandas`](loading-pandas.ipynb) shows the recommended way to load data, using Pandas (supporting any input format that Pandas supports, including CSV files and SQL databases) -- [`loading-networkx`](loading-networkx.ipynb) shows how to load data from a [NetworkX](https://networkx.github.io) graph -- [`loading-saving-neo4j`](loading-saving-neo4j.ipynb) shows how to load data from a [Neo4j](https://neo4j.com) database, and save results back to it - -See [all demos for machine learning algorithms](../README.md). +- Loading data into StellarGraph from Pandas. View: [here](loading-pandas.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/basics/loading-pandas.html) +- Loading data into StellarGraph from NetworkX. View: [here](loading-networkx.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/basics/loading-networkx.html) +- Loading and saving data between StellarGraph and Neo4j. View: [here](loading-saving-neo4j.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/basics/loading-saving-neo4j.html) + diff --git a/demos/calibration/README.md b/demos/calibration/README.md index 0518f2f80..27910c616 100644 --- a/demos/calibration/README.md +++ b/demos/calibration/README.md @@ -1,10 +1,10 @@ ## Ensemble learning for graph neural network algorithms -This folder contains two [Jupyter](http://jupyter.org/) python notebooks demonstrating `StellarGraph` model calibration -for binary (`calibration-pubmed-link-prediction.ipynb`) and multi-class -classification (`calibration-pubmed-node-classification.ipynb`) problems. + + -## References +These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/stable/demos/calibration/ -**1.** On Calibration of Modern Neural Networks. C. Guo, G. Pleiss, Y. Sun, and K. Q. Weinberger. ICML -2017. ([link](https://geoffpleiss.com/nn_calibration)) +- Node Attribute Inference (multi-class) using GraphSAGE and the Pubmed-Diabetes citation network with calibration. View: [here](calibration-pubmed-node-classification.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/calibration/calibration-pubmed-node-classification.html) +- Link prediction example and calibration: GraphSAGE on the PubMed-Diabetes citation dataset. View: [here](calibration-pubmed-link-prediction.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/calibration/calibration-pubmed-link-prediction.html) + diff --git a/demos/community_detection/README.md b/demos/community_detection/README.md index a18581f78..0e9fde8e3 100644 --- a/demos/community_detection/README.md +++ b/demos/community_detection/README.md @@ -1,25 +1,9 @@ # Community detection on a terrorist attack data -This is an example of using Unsupervised GraphSAGE embeddings with clustering to demonstrate how to solve community detection problem. The demo guides through the steps and shows the differences between "traditional" community detection (infomap) and the clustering-of-embeddings approach. + + -## Requirements -This example assumes the `stellargraph` library and its requirements have been -installed by following the installation instructions in the README -of the library's [root directory](https://github.com/stellargraph/stellargraph). +These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/stable/demos/community_detection/ -These demos require `python-igraph`, which can be installed via: - -``` -pip install stellargraph[demos,igraph] -``` - -## Data - -The dataset used in this demo is available at https://www.kaggle.com/START-UMD/gtd. The Global Terrorism Database (GTD) is an open-source database including information on terrorist attacks around the world from 1970 through 2017. The GTD includes systematic data on domestic as well as international terrorist incidents and includes more than 180,000 attacks. The database is maintained by researchers at the National Consortium for the Study of Terrorism and Responses to Terrorism (START), from the University of Maryland. For information refer to the initial data source: https://www.start.umd.edu/gtd/. - - -To run the demo notebook, extract the data into a directory, and adjust the data path in the notebook pointing to the raw data - -## Issues - -If you experience problems in installing `igraph-python`, please refer to the installation page https://igraph.org/python/ for help. +- Comparison of clustering of node embeddings with a traditional community detection method. View: [here](attacks_clustering_analysis.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/community_detection/attacks_clustering_analysis.html) + diff --git a/demos/connector/neo4j/README.md b/demos/connector/neo4j/README.md index 3fd4c272d..d7c5569fb 100644 --- a/demos/connector/neo4j/README.md +++ b/demos/connector/neo4j/README.md @@ -1,17 +1,11 @@ # Connect to Remote Neo4J Graph Databases -In this folder: -- [directed-graphsage-on-cora-neo4j-example.ipynb](./directed-graphsage-on-cora-neo4j-example.ipynb) and [undirected-graphsage-on-cora-neo4j-example.ipynb](./undirected-graphsage-on-cora-neo4j-example.ipynb) provide examples of running GraphSAGE with connection to graph database. + + -- [load-cora-into-neo4j.ipynb](./load-cora-into-neo4j.ipynb) provides demo of loading Cora network citation dataset into neo4j database. +These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/stable/demos/connector/neo4j/ -Required Installations: - -- **Neo4J**: Instruction to download [here](https://neo4j.com/docs/operations-manual/current/installation/). -- **APOC library** plug-in: APOC provides utilities for common procedures and functions in Neo4J. Instruction to download and install [here](https://neo4j.com/developer/neo4j-apoc/). -- **py2neo**: A client library and toolkit to connect to Neo4J database from within python applications. Install ```py2neo``` by using pip: `pip install py2neo`. `py2neo` documentation [here](https://py2neo.org/v4/). - - -> :warning: All functionalities demonstrated in the above-mentioned notebooks are experimental. They have not been tested thoroughly and the implementation might be dramatically changed. - -There is also [a demonstration of loading data into memory from Neo4j](../../basics/loading-saving-neo4j.ipynb). This allows using any StellarGraph algorithm on data from Neo4j. +- Notebook demo on loading Cora dataset into Neo4J Database. View: [here](load-cora-into-neo4j.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/connector/neo4j/load-cora-into-neo4j.html) +- Stellargraph example: directed CORA citation network with directed GraphSAGE and Neo4J.. View: [here](directed-graphsage-on-cora-neo4j-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/connector/neo4j/directed-graphsage-on-cora-neo4j-example.html) +- Undirected GraphSAGE on the CORA citation network using StellarGraph and Neo4j. View: [here](undirected-graphsage-on-cora-neo4j-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/connector/neo4j/undirected-graphsage-on-cora-neo4j-example.html) + diff --git a/demos/embeddings/README.md b/demos/embeddings/README.md index fab7ef846..740ff413d 100644 --- a/demos/embeddings/README.md +++ b/demos/embeddings/README.md @@ -1,35 +1,18 @@ ## Representation learning using StellarGraph -[StellarGraph](https://github.com/stellargraph/stellargraph) provides numerous algorithms for doing node and edge representation learning on graphs. This folder contains demos of all of them to explain how they work and how to use them as part of a TensorFlow Keras data science workflow. - -A node representation learning task computes a representation or embedding vector for each node in a graph. These vectors capture latent/hidden information about the nodes and edges, and can be used for (semi-)supervised downstream tasks like [node classification][nc] and [link prediction][lp], or unsupervised ones like [community detection][cd] or similarity searches. Representation learning is typically an unsupervised task, where the model is trained on data that does not have any ground-truth labels. - -Node representations can also be computed from (semi-)supervised models, using the output of a hidden layer as the embedding vector for nodes or edges. StellarGraph provides some [demonstrations of node classification][nc] and [link prediction][lp], some of which include computing and visualising node or edge embeddings. - -[nc]: ../node-classification/README.md -[lp]: ../link-prediction/README.md -[cd]: ../community_detection/README.md - -## Find algorithms and demos for a graph - -This table lists all representation learning demos, including the algorithms trained, how they are trained, the types of graph used, and the tasks demonstrated. - -| demo | algorithm(s) | training method | node features | downstream tasks shown | -|---|---|---|---|---| -| [Deep Graph Infomax][dgi] | GCN, GAT, PPNP, APPNP, GraphSAGE, HinSAGE | `DeepGraphInfomax` (mutual information) | yes | visualisation, node classification | -| [Unsupervised GraphSAGE][graphsage] | GraphSAGE | `UnsupervisedSampler` (link prediction) | yes | visualisation, node classification | -| [Attri2Vec][attri2vec] | Attri2Vec | `UnsupervisedSampler` (link prediction) | yes | visualisation | -| [Metapath2Vec][metapath2vec] | Metapath2Vec | natively unsupervised | | visualisation | -| [Node2Vec][node2vec] | Node2Vec | natively unsupervised | | visualisation | -| [Watch Your Step][wys] | Watch Your Step | natively unsupervised | | visualisation, node classification | -| [GraphWave][graphwave] | GraphWave | natively unsupervised | | visualisation, node classification | - -[dgi]: deep-graph-infomax-cora.ipynb -[graphsage]: embeddings-unsupervised-graphsage-cora.ipynb -[graphwave]: graphwave-barbell.ipynb -[attri2vec]: stellargraph-attri2vec-citeseer.ipynb -[metapath2vec]: stellargraph-metapath2vec.ipynb -[node2vec]: stellargraph-node2vec.ipynb -[wys]: watch-your-step-cora-demo.ipynb - -See [the root README](../../README.md) or each algorithm's documentation for the relevant citation(s). See [the demo README](../README.md) for more tasks, and a summary of each algorithm. + + + +These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/stable/demos/embeddings/ + +- Node Representation Learning with attri2vec on Citeseer. View: [here](stellargraph-attri2vec-citeseer.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/embeddings/stellargraph-attri2vec-citeseer.html) +- Graph representation learning through Unsupervised GraphSAGE. View: [here](embeddings-unsupervised-graphsage-cora.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/embeddings/embeddings-unsupervised-graphsage-cora.html) +- GraphWave aglorithm on a barbell graph. View: [here](graphwave-barbell.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/embeddings/graphwave-barbell.html) +- Node representation learning with Node2Vec on Cora. View: [here](stellargraph-node2vec.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/embeddings/stellargraph-node2vec.html) +- Node representation learning with Watch Your Step on Cora. View: [here](watch-your-step-cora-demo.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/embeddings/watch-your-step-cora-demo.html) +- GCN Deep Graph Infomax on MovieLens. View: [here](deep-graph-infomax-blogcatalog3.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/embeddings/deep-graph-infomax-blogcatalog3.html) +- GCN Deep Graph Infomax on MovieLens. View: [here](deep-graph-infomax-aifb.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/embeddings/deep-graph-infomax-aifb.html) +- Node representation learning with Metapath2Vec on BlogCatalog3. View: [here](stellargraph-metapath2vec.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/embeddings/stellargraph-metapath2vec.html) +- GCN Deep Graph Infomax on MovieLens. View: [here](deep-graph-infomax-movielens.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/embeddings/deep-graph-infomax-movielens.html) +- GCN Deep Graph Infomax on CORA. View: [here](deep-graph-infomax-cora.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/embeddings/deep-graph-infomax-cora.html) + diff --git a/demos/ensembles/README.md b/demos/ensembles/README.md index 3b416e43e..1286b39f7 100644 --- a/demos/ensembles/README.md +++ b/demos/ensembles/README.md @@ -1,5 +1,10 @@ ## Ensemble learning for graph neural network algorithms -This folder contains two [Jupyter](http://jupyter.org/) python notebooks demonstrating the use of ensemble learning -for node attribute inference (`ensemble-node-classification-example.ipynb`) and -link prediction (`ensemble-link-prediction-example.ipynb`) using `StellarGraph`'s graph neural network algorithms. + + + +These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/stable/demos/ensembles/ + +- Stellargraph Ensembles for node attribute inference. View: [here](ensemble-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/ensembles/ensemble-node-classification-example.html) +- StellarGraph Ensemble for link prediction. View: [here](ensemble-link-prediction-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/ensembles/ensemble-link-prediction-example.html) + diff --git a/demos/graph-classification/README.md b/demos/graph-classification/README.md index d84b9d171..00b9b22a8 100644 --- a/demos/graph-classification/README.md +++ b/demos/graph-classification/README.md @@ -1,17 +1,10 @@ # Graph classification using StellarGraph -[StellarGraph](https://github.com/stellargraph/stellargraph) provides an algorithm for graph classification. This folder contains a demo to explain how it works and how to use it as part of a TensorFlow Keras data science workflow. + + -A graph classification task predicts an attribute of each graph in a collection of graphs. For instance, labelling each graph with a categorical class (binary classification or multiclass classification), or predicting a continuous number (regression). It is supervised or semi-supervised, where the model is trained using a subset of graphs that have ground-truth labels. +These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/stable/demos/graph-classification/ -## Find algorithms and demos for a collection of graphs - -This table lists all graph classification demos, including the algorithms trained and the types of graphs used. - -| demo | algorithm(s) | node features | inductive | -|---|---|---|---| -| [GCN Supervised Graph Classification][supervised-gcn] | GCN, mean pooling | yes | yes | - -[supervised-gcn]: supervised-graph-classification.ipynb - -See [the demo README](../README.md) for more tasks, and a summary of each algorithm. +- Supervised graph classification example. View: [here](supervised-graph-classification.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/graph-classification/supervised-graph-classification.html) +- Supervised graph classification with Deep Graph Convolutional Neural Networks. View: [here](dgcnn-graph-classification.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/graph-classification/dgcnn-graph-classification.html) + diff --git a/demos/interpretability/README.md b/demos/interpretability/README.md index da0e53988..e190e9c53 100644 --- a/demos/interpretability/README.md +++ b/demos/interpretability/README.md @@ -1,23 +1,12 @@ # Interpretability of node classification results using StellarGraph -[StellarGraph](https://github.com/stellargraph/stellargraph) has support for inspecting several different algorithms for [node classification][nc] to understand or interpret how they came to a decision. This folder contains demos of all of them to explain how they work and how to use them as part of a TensorFlow Keras data science workflow. + + -Interpreting a model involves training and making predictions for a model, and then analysing the predictions and the model to find which neighbours and which features had the largest influence on the prediction. +These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/stable/demos/interpretability/ -## Find algorithms and demos - -This table lists interpretability demos, including the algorithms used. - -| demo | algorithm(s) | -|---|---| -| [GCN (dense)][gcn-dense] | GCN, Integrated Gradients | -| [GCN (sparse)][gcn-sparse] | GCN, Integrated Gradients | -| [GAT][gat] | GAT, Integrated Gradients | - -[gcn-dense]: gcn/node-link-importance-demo-gcn.ipynb -[gcn-sparse]: gcn/node-link-importance-demo-gcn-sparse.ipynb -[gat]: gat/node-link-importance-demo-gat.ipynb - -See [the root README](../../README.md) or each algorithm's documentation for the relevant citation(s). See [the demo README](../README.md) for more tasks, and a summary of each algorithm. See [the node classification demos][nc] for more details on the base task. - -[nc]: ../node-classification/README.md +- Interpreting Nodes and Edges by Saliency Maps in GAT. View: [here](gat/node-link-importance-demo-gat.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/interpretability/gat/node-link-importance-demo-gat.html) +- Intepretability on Hateful Twitter Datasets. View: [here](gcn/hateful-twitters-interpretability.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/interpretability/gcn/hateful-twitters-interpretability.html) +- Interpreting Nodes and Edges by Saliency Maps in GCN. View: [here](gcn/node-link-importance-demo-gcn.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/interpretability/gcn/node-link-importance-demo-gcn.html) +- Interpreting Nodes and Edges by Saliency Maps in GCN (sparse). View: [here](gcn/node-link-importance-demo-gcn-sparse.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/interpretability/gcn/node-link-importance-demo-gcn-sparse.html) + diff --git a/demos/link-prediction/README.md b/demos/link-prediction/README.md index 0d21aec93..4b6192705 100644 --- a/demos/link-prediction/README.md +++ b/demos/link-prediction/README.md @@ -1,33 +1,16 @@ # Link prediction using StellarGraph -[StellarGraph](https://github.com/stellargraph/stellargraph) provides numerous algorithms for doing link prediction on graphs. This folder contains demos of all of them to explain how they work and how to use them as part of a TensorFlow Keras data science workflow. - -A link prediction task predicts an attribute of links/edges in a graph. For instance, predicting whether a link/edge that isn't already in the graph should exist (binary classification, or recommendation, or knowledge base completion, in a knowledge graph), or even labelling existing links with a categorical class (binary classification or multiclass classification), or predicting a continuous number (regression). It is supervised or semi-supervised, where the model is trained using a subset of links/edges that have ground-truth labels. For predicting edge existence, the ground-truth may just be whether the edge exists in the original data, rather than a separate label. - -Link prediction can also be done as a downstream task from node representation learning/embeddings, by combining node embedding vectors for the source and target nodes of the edge and training a supervised or semi-supervised classifier against the result. Unsupervised algorithms that can be used in this manner include random walk-based methods like Metapath2Vec. StellarGraph provides [demos of unsupervised algorithms](../embeddings). - -## Find algorithms and demos for a graph - -This table lists all node classification demos, including the algorithms trained and the types of graph used. - -| Demo | Algorithm | Node features | Heterogeneous | Temporal | -|---|---|---|---|---| -| [GCN][gcn] | GCN | yes | | | -| [Attri2Vec][attri2vec] | Attri2Vec | yes | | | -| [GraphSAGE][graphsage] | GraphSAGE | yes | | | -| [HinSAGE][hinsage] | HinSAGE | yes | yes | | -| [Node2Vec][node2vec] | Node2Vec | | | | -| [CTDNE][ctdne] | CTDNE | | | yes | -| [ComplEx][complex] | ComplEx | | yes, multiple edge types | | -| [DistMult][distmult] | DistMult | | yes, multiple edge types | | - -[gcn]: gcn/cora-gcn-links-example.ipynb -[attri2vec]: attri2vec/stellargraph-attri2vec-DBLP.ipynb -[graphsage]: graphsage/cora-links-example.ipynb -[hinsage]: hinsage/movielens-recommender.ipynb -[node2vec]: random-walks/cora-lp-demo.ipynb -[ctdne]: random-walks/ctdne-link-prediction.ipynb -[complex]: knowledge-graphs/complex.ipynb -[distmult]: knowledge-graphs/distmult.ipynb - -See [the root README](../../README.md) or each algorithm's documentation for the relevant citation(s). See [the demo README](../README.md) for more tasks, and a summary of each algorithm. + + + +These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/ + +- Link prediction example: GraphSAGE on the Cora citation dataset. View: [here](graphsage/cora-links-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/graphsage/cora-links-example.html) +- Link prediction with Node2Vec on Cora. View: [here](random-walks/cora-lp-demo.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/random-walks/cora-lp-demo.html) +- Continuous-Time Dynamic Network Embeddings. View: [here](random-walks/ctdne-link-prediction.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/random-walks/ctdne-link-prediction.html) +- Inductive Node Representation Learning through attri2vec. View: [here](attri2vec/stellargraph-attri2vec-DBLP.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/attri2vec/stellargraph-attri2vec-DBLP.html) +- Stellargraph example: Heterogeneous GraphSAGE on the Movielens recommendation dataset. View: [here](hinsage/movielens-recommender.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/hinsage/movielens-recommender.html) +- ComplEx on WN18 and FB15K. View: [here](knowledge-graphs/complex.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/knowledge-graphs/complex.html) +- DistMult on WN18 and FB15K. View: [here](knowledge-graphs/distmult.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/knowledge-graphs/distmult.html) +- Link prediction example: GCN on the Cora citation dataset. View: [here](gcn/cora-gcn-links-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/gcn/cora-gcn-links-example.html) + diff --git a/demos/link-prediction/attri2vec/README.md b/demos/link-prediction/attri2vec/README.md index 8ce7a6251..878b94a1f 100644 --- a/demos/link-prediction/attri2vec/README.md +++ b/demos/link-prediction/attri2vec/README.md @@ -1,51 +1,9 @@ # attri2vec Link Prediction for Out-of-sample Nodes -This is an example of using the attri2vec [1] model, with a link classifier on top, -to predict links for out-of-sample nodes in a homogeneous citation network. + + -In this demo, we first train the attri2vec model on the in-sample subgraph and infer -representations for out-of-sample nodes with the trained attri2vec model. Then we use the -obtained node representations to perform link prediction for out-of-sample nodes. +These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/attri2vec/ -The link prediction problem is treated as a supervised binary classification problem for -`(src, dst)` node pairs that make up links in the graph, with positive examples -representing links that do exist in the graph, and negative examples representing -links that don't. - -In this example, we learn to predict citation links between papers in a DBLP dataset (see below). - -## Requirements -This example assumes the `stellargraph` library and its requirements have been -installed by following the installation instructions in the README -of the library's [root directory](https://github.com/stellargraph/stellargraph). - -## DBLP dataset - -This example is tested on the DBLP dataset. The attri2vec model assumes that node -features are available. - -The following is the description of the dataset: -> The DBLP citation network is a subgraph extracted from DBLP-Citation-network V3 (https://aminer.org/citation). -> To form this subgraph, papers from four subjects are extracted according to their venue information: -> Database, Data Mining, Artificial Intelligence and Computer Vision, and papers with no citations are removed. -> The DBLP network contains 18,448 papers and 45,661 citation relations. From paper titles, we construct -> 2,476-dimensional binary node feature vectors, with each element indicating the presence/absence of the corresponding word. -> By ignoring the citation direction, we take the DBLP subgraph as an undirected network. - -Download and unzip the [DBLP.zip](https://www.kaggle.com/daozhang/dblp-subgraph) file to a location on your computer -and pass this location as a command line argument to this script. - -## Running the notebook -The narrated version of this example is available in the `stellargraph-attri2vec-DBLP.ipynb` notebook. -To run the notebook: - - Activate the python 3.6 environment in which the -`stellargraph` library is installed - - Start `jupyter-notebook` - - note: you may need to first install `jupyter` by running `pip install jupyter` in your python environment - - Navigate to the notebook (`/demos/link-prediction/attri2vec/stellargraph-attri2vec-DBLP.ipynb`), and click on - it to launch the notebook. - -## References - -[1] Attributed Network Embedding via Subspace Discovery. D. Zhang, J, Yin, X. Zhu and C. Zhang, arXiv:1901.04095, -[cs.SI], 2019. ([link](https://arxiv.org/abs/1901.04095)) +- Inductive Node Representation Learning through attri2vec. View: [here](stellargraph-attri2vec-DBLP.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/attri2vec/stellargraph-attri2vec-DBLP.html) + diff --git a/demos/link-prediction/graphsage/README.md b/demos/link-prediction/graphsage/README.md index f8d47c86e..b3a2bafb7 100644 --- a/demos/link-prediction/graphsage/README.md +++ b/demos/link-prediction/graphsage/README.md @@ -1,36 +1,9 @@ # Graphsage Link Prediction -This is an example of using the GraphSAGE [1] model, with a link classifier on top, -to predict links in a homogeneous citation network. + + -The link prediction problem is treated as a supervised binary classification problem for -`(src, dst)` node pairs that make up links in the graph, with positive examples -representing links that do exist in the graph, and negative examples representing -links that don't. +These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/graphsage/ -In this example, we learn to predict citation links between papers in a Cora dataset (see below). - -## Requirements -This example assumes the `stellargraph` library and its requirements have been -installed by following the installation instructions in the README -of the library's [root directory](https://github.com/stellargraph/stellargraph). - -## CORA dataset - -Currently this example is tested on the CORA dataset. The GraphSAGE model assumes that node -features are available. - -## Running the notebook -The narrated version of this example is available in the `cora-links-example.ipynb` notebook. -To run the notebook: - - Activate the python 3.6 environment in which the -`stellargraph` library is installed - - Start `jupyter-notebook` - - note: you may need to first install `jupyter` by running `pip install jupyter` in your python environment - - Navigate to the notebook (`/demos/link-prediction/graphsage/cora-links-example.ipynb`), and click on - it to launch the notebook. - -## References - -[1] W. L. Hamilton, R. Ying, and J. Leskovec, “Inductive representation learning on large graphs,” presented at NIPS 2017 -([arXiv:1706.02216](https://arxiv.org/abs/1706.02216)). +- Link prediction example: GraphSAGE on the Cora citation dataset. View: [here](cora-links-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/graphsage/cora-links-example.html) + diff --git a/demos/link-prediction/hinsage/README.md b/demos/link-prediction/hinsage/README.md index 1e505f35a..7c1fd05ca 100644 --- a/demos/link-prediction/hinsage/README.md +++ b/demos/link-prediction/hinsage/README.md @@ -1,43 +1,9 @@ # Hinsage Recommender -- Movielens Example -This is an example of using Heterogeneous GraphSAGE [1] (HinSAGE) as a hybrid recommender -system, predicting user-movie ratings for the Movielens dataset. + + -## Requirements -This example assumes the `stellargraph` library and its requirements have been -installed by following the installation instructions in the README -of the library's [root directory](https://github.com/stellargraph/stellargraph). +These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/hinsage/ -## MovieLens Data - -The MovieLens data contains a bipartite graph of Movies and Users, and edges -between them denoting reviews with scores ranging from 1 to 5. - -### Getting the data - -The data for this example is the MovieLens dataset of movie ratings -collected from the MovieLens web site (http://movielens.org). -The dataset of 100,000 ratings from 943 users on 1682 movies -can be downloaded from [this link](https://grouplens.org/datasets/movielens/100k/). - -To run the examples, extract the data into a directory, -and adjust the command line below to have `--data_path` pointing -to the data directory. - -## Running the notebook -The narrated version of this example is available in the `movielens-recommender.ipynb` notebook. -To run through the notebook, you need to launch jupyter notebook: - - Activate the python 3.6 environment in which the -`stellargraph` library is installed - - Run the following command `jupyter-notebook`, and note the ip address and port - number at which is it listening (normally it should be http://127.0.0.1:8888/) - - note: you may need to first install `jupyter` by running `pip install jupyter` in your python environment - - Copy-paste the ip address obtained in the previous step into your browser. You should see - a directory structure of the `stellargraph` library. - - Navigate to `/demos/link-prediction-hinsage/movielens-recommender.ipynb`, and click on - it to launch the notebook. - -## References - -[1] W. L. Hamilton, R. Ying, and J. Leskovec, “Inductive representation learning on large graphs,” presented at NIPS 2017 -([arXiv:1706.02216](https://arxiv.org/abs/1706.02216)). +- Stellargraph example: Heterogeneous GraphSAGE on the Movielens recommendation dataset. View: [here](movielens-recommender.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/hinsage/movielens-recommender.html) + diff --git a/demos/link-prediction/random-walks/README.md b/demos/link-prediction/random-walks/README.md index 533dc4d70..ca14b43bc 100644 --- a/demos/link-prediction/random-walks/README.md +++ b/demos/link-prediction/random-walks/README.md @@ -1,126 +1,10 @@ # Link Prediction demo -The notebook `cora-lp-demo.ipynb` demonstrates how to predict citation links/edges between papers in the homogeneous CORA dataset using the random walk-based representation learning method Node2Vec. + + -The main.py script runs link prediction on a homogeneous or heterogeneous graph. When -the graph is heterogeneous, it can optionally be treated as homogeneous for representation learning; in -this case, the link prediction script can be thought of as a baseline for more advanced -algorithms that do not simplify the input graph. +These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/random-walks/ -In addition, for heterogeneous graphs, the link prediction script gives the user some control over what edge -types to predict including a choice of filtering these edges by one of their attributes. Currently, the script only -allows filtering by a date attribute in the format **dd/mm/yyyy**, e.g., *10/10/2005*. The edge attribute holding the date -can be given any text label in the graph, e.g., 'date', 'timestamp', 'start date', etc. - -For example, given a heterogeneous network with nodes representing **people** and **products**, and links connecting people with products -(**purchased**) and people with people (**friend**), then a user can ask that links of type **friend** be predicted. In addition, -if links of type **friend** have a **date** property, for example, in the range *01/01/2000* to *01/01/2010*, then a user -can ask that links to be predicted should occur after *01/01/2005*. That is link data with a date before *01/01/2005* are -used for training, and data after that same date are put aside for predicting/testing. - - -## Requirements -This example assumes the `stellargraph` library and its requirements have been -installed by following the installation instructions in the README -of the library's [root directory](https://github.com/stellargraph/stellargraph). - -### Usage - -#### Command Line Arguments -The script accepts the following command line arguments: - -- `input_graph ` The directory where the graph is stored, either as an edge list or a pickled networkx object. -- `output_node_features ` The file where the node features from representation learning are written -for future reference. -- `subsample` If specified, the graph is subsampled (number of nodes reduced) by a default 0.1 factor, e.g, -10 percent of the original graph. This option is useful for speeding up testing on large graphs. -- `subgraph_size ` Valid values are in the interval (0, 1]. It reduces the graph size by the given factor. -Size reduction is performed by reducing the number of nodes in the graph by the given factor and removing all other -nodes and edges connecting those nodes. -- `sampling_method ` Valid values are 'local' and 'global'. Specifies how pairs of nodes that are not connected are -selected as negative edge samples. The 'global' method, selects pairs of nodes uniformly at random from all nodes in -the graph that are not connected by an edge. The 'local' methods first samples a distance (number of edges) from a -source node (selected uniformly at random from all nodes int he graph) and then selects the first node at this distance -as the target node for the negative edge sample. The distance is sampled based on a probability distribution that can -be specified using the probs command line parameter. -- `sampling_probs ` The probability distribution for sampling distances between -source and target nodes. The first value should always be 0.0 and the remaining values should sum to one. An example for -sampling target nodes up to 4 edges away from source is `"0.0, 0.25, 0.25, 0.5"`. -- `p ` If specified, it indicates the number of positive and negative edges to be used for training -the link prediction classifier. The value indicates a percentage with respect to the relevant number of -edges in the input graph. The default value is 0.1 and valid values are in the range (0,1). -- `hin` If specified, it indicates that the input graph is heterogeneous. If not specified, a heterogeneous graph is -simplified to homogeneous and the options `edge_type`, `edge_attribute_label`, `edge_attribute_threshold`, and -`attribute_is_datetime` are ignored even if given. -- `metapaths ` For heterogeneous graphs (must specify `hin` option), this option can be used to specify the -metapaths for the random walks. A metapath is a `,` separated list of node labels; more than one metapaths can -be specified separated by a `;`. An example specifying 2 metapaths assuming node labels `author, paper, venue` is -`"author, paper, author; author, paper, venue, paper, author"`. -- `edge_type ` For heterogeneous graphs, this option is used to specify the type of edge (by its label) to -predict. -- `edge_attribute_label ` For heterogeneous graphs, this option is used to specify the edges that should be -predicted based on an attribute; the only valid attribute is a date in the format dd/mm/yyyy, e.g., 10/2/2018. This -option should be used together with `edge_type`. -- `attribute_is_datetime` If specified together with `edge_attribute_label` it indicates that the type of attribute -to use for selecting edges to predict is a date with format dd/mm/yyyy. Currently, only date attributes are allowed so -this flag should always specified together with `edge_attribute_label`. Later implementations will support numeric -edge attributes in additions to dates. -- `edge_attribute_threshold ` For heterogeneous graphs and used together with `edge_attribute_label` it specifies -a value (date as only dates are currently supported) for edges to predict. -- `show_hist` If this flag is specified, then a histogram of the distances between source and target nodes comprising -negative edge samples is plotted. - -#### Examples - -For the examples we use 2 different datasets. The **Cora** dataset that is a homogeneous network and the -**BlogCatalog3** dataset that is a heterogeneous network. - -**Cora** can be downloaded from [here:](https://linqs-data.soe.ucsc.edu/public/lbc/cora.tgz) - -``` -from stellargraph.datasets import Cora -Cora().download() -``` - -**BlogCatalog3** can be downloaded from [here.]( http://socialcomputing.asu.edu/datasets/BlogCatalog3) - -The **BlogCatalog3** dataset must be loaded into a `networkx` graph object. The `stellargraph` library provides a -utility method, `stellargraph.datasets.BlogCatalog3.load()`, that loads the dataset, -and returns a `StellarGraph` graph object. The following 3 lines of code will prepare the dataset for use in the below examples. - -``` -import networkx as nx -import os -from stellargraph.datasets import BlogCatalog3 -g = BlogCatalog3().load() -nx.write_gpickle(g.to_networkx(), os.path.expanduser('~/data/BlogCatalog3.gpickle')) -``` - - -**Example 1: Homogeneous graph with global sampling method for negative example** -``` -python main.py --input_graph=~/stellargraph-datasets/cora/cora.cites --output_node_features=~/data/cora.emb --sampling_method='global' -``` - -**Example 2: Homogeneous graph with local sampling method for negative examples** -``` -python main.py --input_graph=~/stellargraph-datasets/cora/cora.cites --output_node_features=~/data/cora.emb --sampling_method='local' --sampling_probs="0.0, 0.0, 0.0, 0.5, 0.5" -``` - -**Example 3: Heterogeneous graph treated as homogeneous** -``` -python main.py --input_graph=~/data/BlogCatalog3.gpickle --output_node_features=~/data/bc3.emb --sampling_method='global' -``` - -**Example 4: Heterogeneous graph predicting edges based on edge type** -``` -python main.py --hin --input_graph=~/data/BlogCatalog3.gpickle --output_node_features=~/data/bc3.emb --edge_type="friend" --sampling_method='global' -``` - -### References - -1. Node2Vec: Scalable Feature Learning for Networks. A. Grover, J. Leskovec. ACM SIGKDD International Conference on Knowledge Discovery and Data Mining (KDD), 2016. - -2. Metapath2Vec: Scalable Representation Learning for Heterogeneous Networks. Yuxiao Dong, Nitesh V. Chawla, and Ananthram Swami. ACM SIGKDD International Conference on Knowledge Discovery and Data Mining (KDD), 135–144, 2017 - -3. Social Computing Data Repository at ASU [http://socialcomputing.asu.edu]. R. Zafarani and H. Liu, (2009). Tempe, AZ: Arizona State University, School of Computing, Informatics and Decision Systems Engineering. +- Link prediction with Node2Vec on Cora. View: [here](cora-lp-demo.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/random-walks/cora-lp-demo.html) +- Continuous-Time Dynamic Network Embeddings. View: [here](ctdne-link-prediction.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/random-walks/ctdne-link-prediction.html) + diff --git a/demos/node-classification/README.md b/demos/node-classification/README.md index 48a1b306c..5f8eef871 100644 --- a/demos/node-classification/README.md +++ b/demos/node-classification/README.md @@ -1,43 +1,20 @@ # Node classification using StellarGraph -[StellarGraph](https://github.com/stellargraph/stellargraph) provides numerous algorithms for doing node classification on graphs. This folder contains demos of all of them to explain how they work and how to use them as part of a TensorFlow Keras data science workflow. - -A node classification task predicts an attribute of each node in a graph. For instance, labelling each node with a categorical class (binary classification or multiclass classification), or predicting a continuous number (regression). It is supervised or semi-supervised, where the model is trained using a subset of nodes that have ground-truth labels. - -Node classification can also be done as a downstream task from node representation learning/embeddings, by training a supervised or semi-supervised classifier against the embedding vectors. Unsupervised algorithms that can be used in this manner include random walk-based methods like Metapath2Vec. StellarGraph provides [demos of unsupervised algorithms](../embeddings), some of which include a node classification downstream task. - -## Find algorithms and demos for a graph - -This table lists all node classification demos, including the algorithms trained, the types of graph used, and the tasks demonstrated. - -| Demo | Algorithm(s) | Node features | Heterogeneous | Directed | Edge weights | Inductive | Node embeddings | -|---|---|---|---|---|---|---|---| -| [GCN][gcn] | GCN | yes | | | | | yes | -| [Cluster-GCN][cluster-gcn] | Cluster-GCN | yes | | | | | yes | -| [RGCN][rgcn] | RGCN | yes | yes, multiple edge types | | | | yes | -| [GAT][gat] | GAT | yes | | | | | yes | -| [SGC][sgc] | SGC | yes | | | | | yes | -| [PPNP & APPNP][ppnp] | PPNP, APPNP | yes | | | | | | -| [Attri2Vec][attri2vec] | Attri2Vec | yes | | | | | yes | -| [GraphSAGE on Cora][graphsage] | GraphSAGE | yes | | | | | yes | -| [Inductive GraphSAGE][graphsage-inductive] | GraphSAGE | yes | | | | yes | yes | -| [Directed GraphSAGE][graphsage-directed] | GraphSAGE | yes | | yes | | | yes | -| [HinSAGE][hinsage] | HinSAGE | yes | yes | | | | | -| [Node2Vec][node2vec] | Node2Vec | | | | | | yes | -| [Weighted Node2Vec][node2vec-weighted] | Node2Vec | | | | yes | | yes | - -[gcn]: gcn/gcn-cora-node-classification-example.ipynb -[cluster-gcn]: cluster-gcn/cluster-gcn-node-classification.ipynb -[rgcn]: rgcn/rgcn-aifb-node-classification-example.ipynb -[gat]: gat/gat-cora-node-classification-example.ipynb -[sgc]: sgc/sgc-node-classification-example.ipynb -[ppnp]: ppnp/ppnp-cora-node-classification-example.ipynb -[attri2vec]: attri2vec/attri2vec-citeseer-node-classification-example.ipynb -[graphsage]: graphsage/graphsage-cora-node-classification-example.ipynb -[graphsage-inductive]: graphsage/graphsage-pubmed-inductive-node-classification-example.ipynb -[graphsage-directed]: graphsage/directed-graphsage-on-cora-example.ipynb -[hinsage]: hinsage/README.md -[node2vec]: node2vec/stellargraph-node2vec-node-classification.ipynb -[node2vec-weighted]: node2vec/stellargraph-node2vec-weighted-random-walks.ipynb - -See [the root README](../../README.md) or each algorithm's documentation for the relevant citation(s). See [the demo README](../README.md) for more tasks, and a summary of each algorithm. + + + +These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/stable/demos/node-classification/ + +- Stellargraph example: Graph Attention Network (GAT) on the CORA citation dataset. View: [here](gat/gat-cora-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/gat/gat-cora-node-classification-example.html) +- Inductive representation learning using GraphSAGE on the Pubmed-Diabetes citation network . View: [here](graphsage/graphsage-pubmed-inductive-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/graphsage/graphsage-pubmed-inductive-node-classification-example.html) +- Stellargraph example: Fully directed GraphSAGE on a directed CORA citation network. View: [here](graphsage/directed-graphsage-on-cora-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/graphsage/directed-graphsage-on-cora-example.html) +- Stellargraph example: GraphSAGE on the CORA citation network. View: [here](graphsage/graphsage-cora-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/graphsage/graphsage-cora-node-classification-example.html) +- Stellargraph example: Personalised Propagation of Neural Predictions (PPNP) and Approximate PPNP (APPNP) on the CORA citation dataset. View: [here](ppnp/ppnp-cora-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/ppnp/ppnp-cora-node-classification-example.html) +- Cluster-GCN for node classification. View: [here](cluster-gcn/cluster-gcn-node-classification.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/cluster-gcn/cluster-gcn-node-classification.html) +- Node2Vec with weighted random walks. View: [here](node2vec/stellargraph-node2vec-weighted-random-walks.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/node2vec/stellargraph-node2vec-weighted-random-walks.html) +- Node classification with Node2Vec on Cora. View: [here](node2vec/stellargraph-node2vec-node-classification.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/node2vec/stellargraph-node2vec-node-classification.html) +- Stellargraph example: Simplified Graph Convolutions (SGC) on the CORA citation dataset. View: [here](sgc/sgc-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/sgc/sgc-node-classification-example.html) +- Node Representation Learning with attri2vec on Citeseer. View: [here](attri2vec/attri2vec-citeseer-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/attri2vec/attri2vec-citeseer-node-classification-example.html) +- Stellargraph example: Relational Graph Convolutional Network (RGCN) on the AIFB relational dataset. View: [here](rgcn/rgcn-aifb-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/rgcn/rgcn-aifb-node-classification-example.html) +- Graph Convolutional Network (GCN) on the CORA citation dataset. View: [here](gcn/gcn-cora-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/gcn/gcn-cora-node-classification-example.html) + diff --git a/demos/node-classification/attri2vec/README.md b/demos/node-classification/attri2vec/README.md index a9c0f35b6..938e90b67 100644 --- a/demos/node-classification/attri2vec/README.md +++ b/demos/node-classification/attri2vec/README.md @@ -1,33 +1,9 @@ ## Node classification using attri2vec [1] -This folder contains a [Jupyter](http://jupyter.org/) python notebook demonstrating the combined use of -`stellargraph` (this library) and `Scikit-learn` [2] libraries for node classification in a homogeneous graph -attached with node attributes. + + -The example demonstrates node representation learning and node classification using the citeseer -paper citation network. This demo is included in the Jupyter notebook -`attri2vec-citeseer-node-classification-example.ipynb`. +These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/stable/demos/node-classification/attri2vec/ -The notebook includes all the information for downloading the corresponding dataset, training the attri2vec -model and using it to classify nodes with unknown (to the training algorithm) labels. - -To run the notebook, install Jupyter to the same Python 3.6 environment as StellarGraph, following the instructions on -the Jupyter project website: http://jupyter.org/install.html - -After starting the Jupyter server on your computer, load the notebook and follow the instructions inside. - -## Requirements - -The example uses Python 3.6 and the StellarGraph library. To install the StellarGraph library -follow the instructions at: https://github.com/stellargraph/stellargraph - -Additional requirements are Pandas, Numpy and Scikit-Learn which are installed as dependencies -of the StellarGraph library. In addition, Juptyer is required to run the notebook version of -the example. - -## References - -**1.** Attributed Network Embedding via Subspace Discovery. D. Zhang, J, Yin, X. Zhu and C. Zhang, arXiv:1901.04095, -[cs.SI], 2019. ([link](https://arxiv.org/abs/1901.04095)) - -**2.** Scikit-learn: Machine learning in Python ([link](http://scikit-learn.org/stable/)) +- Node Representation Learning with attri2vec on Citeseer. View: [here](attri2vec-citeseer-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/attri2vec/attri2vec-citeseer-node-classification-example.html) + diff --git a/demos/node-classification/gat/README.md b/demos/node-classification/gat/README.md index 2538e9ba9..b4407736f 100644 --- a/demos/node-classification/gat/README.md +++ b/demos/node-classification/gat/README.md @@ -1,26 +1,9 @@ # GAT for Node Classification -This is an example of using the Graph Attention network (GAT) algorithm [1] for semi-supervised node classification -in a homogeneous network. + + -## Requirements -All examples use Python 3.6 and the StellarGraph library. To install the StellarGraph library -follow the instructions at: https://github.com/stellargraph/stellargraph +These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/stable/demos/node-classification/gat/ -Additional requirements are Pandas, Numpy and Scikit-Learn which are installed as depdendencies -of the StellarGraph library. In addition Juptyer is required to run the notebook version of -the example. - -## Running the notebook - -The same example is also available as a Juptyer notebook. To use this install Jupyter to the -same Python 3.6 environment as StellarGraph, following the instructions on the Jupyter project -website: http://jupyter.org/install.html - -After starting the Jupyter server on your computer, load the notebook -`gat-cora-node-classification-example.ipynb` and follow the instructions inside. - - -## References - -[1] Graph Attention Networks. P. Velickovic et al. ICLR 2018 ([link](https://arxiv.org/abs/1710.10903)) +- Stellargraph example: Graph Attention Network (GAT) on the CORA citation dataset. View: [here](gat-cora-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/gat/gat-cora-node-classification-example.html) + diff --git a/demos/node-classification/gcn/README.md b/demos/node-classification/gcn/README.md index 61753c99f..f994fa066 100644 --- a/demos/node-classification/gcn/README.md +++ b/demos/node-classification/gcn/README.md @@ -1,16 +1,9 @@ # GCN for Node Classification -This is an example of using the Graph Convolutional network (GCN) algorithm [1] for semi-supervised node classification -in a homogeneous network. + + -## Requirements -All examples use Python 3.6 and the StellarGraph library. To install the StellarGraph library -follow the instructions at: https://github.com/stellargraph/stellargraph +These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/stable/demos/node-classification/gcn/ -Additional requirements are Pandas, Numpy and Scikit-Learn which are installed as depdendencies -of the StellarGraph library. - -## References - -[1] Semi-Supervised Classification with Graph Convolutional Networks. T. Kipf, M. Welling. -ICLR 2017. arXiv:1609.02907 ([link](https://arxiv.org/abs/1609.02907)) +- Graph Convolutional Network (GCN) on the CORA citation dataset. View: [here](gcn-cora-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/gcn/gcn-cora-node-classification-example.html) + diff --git a/demos/node-classification/graphsage/README.md b/demos/node-classification/graphsage/README.md index 55dcadfc5..3956fb134 100644 --- a/demos/node-classification/graphsage/README.md +++ b/demos/node-classification/graphsage/README.md @@ -1,38 +1,11 @@ # GraphSAGE Node Classification -This folder includes two examples of using the GraphSAGE algorithm [1] for semi-supervised node classification in -homogeneous networks. + + -The first example demonstrates transductive node classification using the Cora citation network. This demo is included -as the Python script `graphsage-cora-example.py` and as the Jupyter -notebook `graphsage-cora-node-classification-example.ipynb`. +These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/stable/demos/node-classification/graphsage/ -The second example demonstrates inductive representation learning and node classification using the Pubmed-Diabetes -paper citation network. This demo is included in the Jupyter notebook -`graphsage-pubmed-inductive-node-classification-example.ipynb`. - -The two Jupyter notebooks include all the information for downloading the corresponding datasets, training the GraphSAGE -models and using them to classify nodes with unknown (to the training algorithm) labels. - -To run the notebooks install Jupyter to the same Python 3.6 environment as StellarGraph, following the instructions on -the Jupyter project website: http://jupyter.org/install.html - -After starting the Jupyter server on your computer, load either of the two notebooks and follow the instructions inside. - -## Requirements -All examples use Python 3.6 and the StellarGraph library. To install the StellarGraph library -follow the instructions at: https://github.com/stellargraph/stellargraph - -Additional requirements are Pandas, Numpy and Scikit-Learn which are installed as depdendencies -of the StellarGraph library. In addition Juptyer is required to run the notebook version of -the example. - -## CORA dataset - -Currently the examples in this directory are tested on the CORA dataset. The GraphSAGE model assumes that node -features are available for all nodes in the graph. - -## References - -[1] W. L. Hamilton, R. Ying, and J. Leskovec, “Inductive representation learning on large graphs,” presented at NIPS 2017 -([arXiv:1706.02216](https://arxiv.org/abs/1706.02216)). +- Inductive representation learning using GraphSAGE on the Pubmed-Diabetes citation network . View: [here](graphsage-pubmed-inductive-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/graphsage/graphsage-pubmed-inductive-node-classification-example.html) +- Stellargraph example: Fully directed GraphSAGE on a directed CORA citation network. View: [here](directed-graphsage-on-cora-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/graphsage/directed-graphsage-on-cora-example.html) +- Stellargraph example: GraphSAGE on the CORA citation network. View: [here](graphsage-cora-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/graphsage/graphsage-cora-node-classification-example.html) + diff --git a/demos/node-classification/hinsage/README.md b/demos/node-classification/hinsage/README.md index b73dc65fb..935526436 100644 --- a/demos/node-classification/hinsage/README.md +++ b/demos/node-classification/hinsage/README.md @@ -1,71 +1,9 @@ # HinSAGE Node Classification -This is an example of using a Heterogenous extension to the GraphSAGE algorithm [1], called HinSAGE, -to classify the nodes in a heterogeneous network (a network with multiple node and link types). + + -This example uses the Yelp dataset and aims to predict the 'elite' status of users. It does this -as a binary classification task predicting if the user has had 'elite' status in any year or has -never had 'elite' status. +These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/stable/demos/node-classification/hinsage/ -## Requirements -Install the StellarGraph library following the instructions at: -https://github.com/stellargraph/stellargraph -Additional requirements are Pandas, Numpy and Scikit-Learn. These are installed as depdendencies -of the StellarGraph library. - -## Yelp dataset - -Currently the examples in this directory use the Yelp dataset. -The Yelp dataset can be obtained by navigating to https://www.yelp.com/dataset, -selecting "Download Dataset" and signing the licence agreement. -Then, download the JSON dataset and uncompress it to an appropriate location -in your filesystem. - -There are several different versions of the dataset, enumerated by "rounds", -to check which round the dataset is, look for the file named "Yelp_Dataset_Challenge_Round_XX.pdf" -where "XX" is the round number. The current script supports rounds 12 and 13. -The path to the Yelp dataset used below should contain the JSON files including -`yelp_academic_dataset_user.json` or `user.json` depending on the round number. - -The example code uses a preprocessed version of the dataset that is generated -by the `yelp-preprocessing.py` script. -To run this script, specify: -the path to the Yelp dataset that you downloaded (`-l`), -the output directory (`-o`), -and the round number (`-r`, which defaults to 13). - -Example usage: -``` -python yelp-preprocessing.py -r XX -l -o . -``` - -By default the script will filter the graph to contain only businesses in the state -of Wisconsin. To change this to another state, or to "false" to use the entire dataset -(warning: this will make the machine learning example run very slowly and will require a lot of -memory as the entire graph will be loaded). - -Example usage to run without filtering: -``` -python yelp-preprocessing.py -l -o . --filter_state=false -``` - -## Running the example - -The example script can be run on supplying the location of the preprocessed Yelp dataset. - -Example usage: -``` -python yelp-example.py -l -``` - -Additional command line arguments are available to tune the training of the model, to see a -description of these arguments use the `--help` argument: -``` -python yelp-example.py --help -``` - -## References - -[1] W. L. Hamilton, R. Ying, and J. Leskovec, “Inductive representation learning on large graphs,” presented at NIPS 2017 -([arXiv:1706.02216](https://arxiv.org/abs/1706.02216)). + diff --git a/demos/node-classification/node2vec/README.md b/demos/node-classification/node2vec/README.md index 818bf4ac1..2deafcc60 100644 --- a/demos/node-classification/node2vec/README.md +++ b/demos/node-classification/node2vec/README.md @@ -1,23 +1,10 @@ ## Node classification using Node2Vec [1] -This folder contains two [Jupyter](http://jupyter.org/) python notebooks demonstrating the combined use of -`stellargraph` (this library), `Gensim` [4], and `Scikit-learn` [3] libraries for node classification in a -homogeneous graph. + + -The examples demonstrate how to calculate node embedding vectors in just a few lines of Python code using the -`Node2Vec` [1] algorithm on both weighted and unweighted graphs. +These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/stable/demos/node-classification/node2vec/ -The learned node representations are then used in a node classification task. Specifically, the example demonstrates -how to predict the subject of a research paper given a paper citation network. The latter is a homogeneous graph -with nodes representing research papers that have a single attribute, namely the subject of the paper. Links in the -graph represent a citation relationship between two papers, i.e., `paper A` cites `paper B`. The graph is -treated as undirected. - -## References - -**1.** Node2Vec: Scalable Feature Learning for Networks. A. Grover, J. Leskovec. ACM SIGKDD International Conference -on Knowledge Discovery and Data Mining (KDD), 2016. ([link](https://snap.stanford.edu/node2vec/)) - -**2.** Gensim: Topic modelling for humans. ([link](https://radimrehurek.com/gensim/)) - -**3.** Scikit-learn: Machine learning in Python ([link](http://scikit-learn.org/stable/)) +- Node2Vec with weighted random walks. View: [here](stellargraph-node2vec-weighted-random-walks.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/node2vec/stellargraph-node2vec-weighted-random-walks.html) +- Node classification with Node2Vec on Cora. View: [here](stellargraph-node2vec-node-classification.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/node2vec/stellargraph-node2vec-node-classification.html) + diff --git a/demos/node-classification/ppnp/README.md b/demos/node-classification/ppnp/README.md index 85357af73..f464352c2 100644 --- a/demos/node-classification/ppnp/README.md +++ b/demos/node-classification/ppnp/README.md @@ -1,15 +1,9 @@ # PPNP and APPNP for Node Classification -This is an example of using the Personalized Propogation of Neural Predictions (PPNP) and Approximate PPNP (APPNP) -algorithms [1] for semi-supervised node classification in a homogeneous network. + + -## Requirements -All examples use Python 3.6 and the StellarGraph library. To install the StellarGraph library -follow the instructions at: https://github.com/stellargraph/stellargraph +These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/stable/demos/node-classification/ppnp/ -Additional requirements are Pandas, Numpy, Keras, and Scikit-Learn which are installed as depdendencies -of the StellarGraph library. - -## References - -[1] Predict then propagate: Graph neural networks meet personalized PageRank. J. Klicpera, A. Bojchevski, and S. Günnemann, S., ICLR, 2019. ([link](https://arxiv.org/abs/1810.05997)) +- Stellargraph example: Personalised Propagation of Neural Predictions (PPNP) and Approximate PPNP (APPNP) on the CORA citation dataset. View: [here](ppnp-cora-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/ppnp/ppnp-cora-node-classification-example.html) + diff --git a/scripts/demo_table.py b/scripts/demo_table.py index 396412702..be4aadf9a 100644 --- a/scripts/demo_table.py +++ b/scripts/demo_table.py @@ -16,10 +16,15 @@ import abc import argparse +import commonmark import contextlib import enum +import glob import itertools +import json +import nbformat import os.path +import re import subprocess import sys import textwrap @@ -27,7 +32,9 @@ HTML_INDENT = 2 LINK_DEFAULT_TEXT = "demo" TRUE_TEXT = "yes" - +DOC_URL_BASE = "https://stellargraph.readthedocs.io/en/stable" +AUTOGENERATED_PROMPT = f"autogenerated by {__file__}, edit that file instead of this location" +DOCS_LINK_SEPARATOR = "\n\n" class LinkKind(enum.Enum): index = 1 @@ -144,9 +151,7 @@ def notebook_suffix(self, checking): def render(self, headings, algorithms): builder = HtmlBuilder(indent=2) - builder.add( - f"" - ) + builder.add(f"") with builder.element("table"): with builder.element("tr"): for heading in headings: @@ -271,7 +276,6 @@ def link_is_valid_relative(link, base_dir): return os.path.exists(os.path.join(base_dir, link)) - # Columns def index_link(*args, **kwargs): return T(*args, **kwargs, kind=LinkKind.index) @@ -511,44 +515,8 @@ def via_rl(link=None): Html("demos/README.md", "\n\n"), ] - -def main(): - parser = argparse.ArgumentParser( - description="Edits or compares the table of all algorithms and their demos in `demos/README.md` and `docs/demos/index.txt`" - ) - parser.add_argument( - "--action", - choices=["compare", "overwrite"], - default="compare", - help="whether to compare the tables against what would be generated, or to overwrite them table with new ones (default: %(default)s)", - ) - args = parser.parse_args() - - def error(message, edit_fixit=False): - formatted = ( - f"Error while generating algorithm tables for documentation: {message}" - ) - if edit_fixit: - formatted += f"\n\nTo fix, edit `{__file__}` as appropriate and run it like `python {__file__} --action=overwrite` to overwrite existing table with new one." - - print(formatted, file=sys.stderr) - - try: - subprocess.run( - [ - "buildkite-agent", - "annotate", - "--style=error", - "--context=demo_table", - formatted, - ] - ) - except FileNotFoundError: - # no agent, so probably on buildkite, and so silently no annotation - pass - - sys.exit(1) - +def tables(action): + compare = action == "compare" for file_fmt in FILES: new_table = file_fmt.render(COLUMNS, ALGORITHMS) file_name = file_fmt.file_name @@ -573,32 +541,128 @@ def error(message, edit_fixit=False): edit_fixit=True, ) - with open(file_name, "r+") as f: - file_contents = f.read() - parts = file_contents.split(separator) - if len(parts) != 3: - code_block = textwrap.indent(separator.strip(), " ") - error( - f"expected exactly two instances of the separator on their own lines in `{file_name}`, found {len(parts) - 1} instances. Separator should be:\n\n{code_block}" - ) + separate_compare_overwrite(file_name, separator, action=action, new_middle=new_table, label="table") + + +TITLE_RE = re.compile("^# (.*)") + +def demo_list(root): + repo_dir = os.getcwd() + + os.chdir(root) + try: + for demo in glob.iglob("**/*.ipynb", recursive=True): + if ".ipynb_checkpoint" in demo: + continue + + notebook = nbformat.read(demo, as_version=4) + markdown = "".join(notebook.cells[0].source) + title = TITLE_RE.match(markdown) + text = title[1] + + demo_html = demo.replace(".ipynb", ".html") + url = os.path.join(DOC_URL_BASE, root, demo_html) + + yield f"- {text}. View: [here]({demo}), [rendered]({url})" + finally: + os.chdir(repo_dir) + + +def demo_indexing(action): + root_dir = "demos/" + compare = action == "compare" + + for directory in glob.iglob("demos/**/", recursive=True): + readme = os.path.join(directory, "README.md") + if not os.path.exists(readme): + # FIXME(#1139): some demos directories don't have a README + continue + + index = os.path.join("docs", directory, "index.txt") + if not os.path.exists(index): + error(f"expected each demo README to match a docs 'index.txt' file, found `{readme}` without corresponding `{index}`") + + link = f"{DOC_URL_BASE}/{directory}" + if directory != root_dir: + # the root readme already has the table in it + listing = "\n".join(demo_list(directory)) + else: + listing = "" + + new_contents = f"""\ + + +These demos are displayed with detailed descriptions in the documentation: {link} + +{listing}""" + + separate_compare_overwrite(readme, DOCS_LINK_SEPARATOR, action=action, new_middle=new_contents, label="docs link") + + +def separate_compare_overwrite(file_name, separator, action, new_middle, label): + with open(file_name, "r+") as f: + file_contents = f.read() + parts = file_contents.split(separator) + + if len(parts) != 3: + code_block = textwrap.indent(separator.strip(), " ") + error( + f"expected exactly two instances of the separator on their own lines in `{file_name}`, found {len(parts) - 1} instances. Separator should be:\n\n{code_block}" + ) + + prefix, current_middle, suffix = parts + if action == "compare" and new_middle != current_middle: + error( + f"existing {label} in `{file_name}` differs to generated {label}; was it edited manually?", + edit_fixit=True, + ) + elif action == "overwrite": + f.seek(0) + f.write("".join([prefix, separator, new_middle, separator, suffix])) + # delete any remaining content + f.truncate() + - prefix, current_table, suffix = parts +def error(message, edit_fixit=False): + formatted = ( + f"Error while generating information for documentation: {message}" + ) + if edit_fixit: + formatted += f"\n\nTo fix, edit `{__file__}` as appropriate and run it like `python {__file__} --action=overwrite` to overwrite existing information with updated form." + + print(formatted, file=sys.stderr) + + try: + subprocess.run( + [ + "buildkite-agent", + "annotate", + "--style=error", + "--context=demo_table", + formatted, + ] + ) + except FileNotFoundError: + # no agent, so probably on buildkite, and so silently no annotation + pass - if args.action == "compare": - if new_table != current_table: - error( - f"existing table in `{file_name}` differs to generated table; was it edited manually?", - edit_fixit=True, - ) + sys.exit(1) - elif args.action == "overwrite": - file_chunks = [prefix, separator, new_table, separator, suffix] - f.seek(0) - f.write("".join(file_chunks)) +def main(): + parser = argparse.ArgumentParser( + description="Edits or compares the table of all algorithms and their demos in `demos/README.md` and `docs/demos/index.txt`" + ) + parser.add_argument( + "--action", + choices=["compare", "overwrite"], + default="compare", + help="whether to compare the tables against what would be generated, or to overwrite them table with new ones (default: %(default)s)", + ) + args = parser.parse_args() - # delete any remaining content - f.truncate() + tables(args.action) + demo_indexing(args.action) if __name__ == "__main__": From 0119f7204264ec8efd26fed47794d506735fdf9f Mon Sep 17 00:00:00 2001 From: Huon Wilson Date: Fri, 1 May 2020 14:39:59 +1000 Subject: [PATCH 02/43] Rename demo_table.py to demo_indexing.py --- scripts/{demo_table.py => demo_indexing.py} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename scripts/{demo_table.py => demo_indexing.py} (99%) diff --git a/scripts/demo_table.py b/scripts/demo_indexing.py similarity index 99% rename from scripts/demo_table.py rename to scripts/demo_indexing.py index be4aadf9a..0a0a82b2d 100644 --- a/scripts/demo_table.py +++ b/scripts/demo_indexing.py @@ -638,7 +638,7 @@ def error(message, edit_fixit=False): "buildkite-agent", "annotate", "--style=error", - "--context=demo_table", + "--context=demo_indexing", formatted, ] ) From 12b3ea68001e97fc9f0c735ee1db7f3fcdad88de Mon Sep 17 00:00:00 2001 From: Huon Wilson Date: Fri, 1 May 2020 14:41:46 +1000 Subject: [PATCH 03/43] REVERT ME: point to latest for testing --- demos/README.md | 6 ++-- demos/basics/README.md | 10 +++---- demos/calibration/README.md | 8 +++--- demos/community_detection/README.md | 6 ++-- demos/connector/neo4j/README.md | 10 +++---- demos/embeddings/README.md | 24 ++++++++-------- demos/ensembles/README.md | 8 +++--- demos/graph-classification/README.md | 8 +++--- demos/interpretability/README.md | 12 ++++---- demos/link-prediction/README.md | 20 ++++++------- demos/link-prediction/attri2vec/README.md | 6 ++-- demos/link-prediction/graphsage/README.md | 6 ++-- demos/link-prediction/hinsage/README.md | 6 ++-- demos/link-prediction/random-walks/README.md | 8 +++--- demos/node-classification/README.md | 28 +++++++++---------- demos/node-classification/attri2vec/README.md | 6 ++-- demos/node-classification/gat/README.md | 6 ++-- demos/node-classification/gcn/README.md | 6 ++-- demos/node-classification/graphsage/README.md | 10 +++---- demos/node-classification/hinsage/README.md | 4 +-- demos/node-classification/node2vec/README.md | 8 +++--- demos/node-classification/ppnp/README.md | 6 ++-- scripts/demo_indexing.py | 3 +- 23 files changed, 108 insertions(+), 107 deletions(-) diff --git a/demos/README.md b/demos/README.md index 9ed682272..a8fa5ad42 100644 --- a/demos/README.md +++ b/demos/README.md @@ -1,15 +1,15 @@ # StellarGraph demos - + -These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/stable/demos/ +These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/ - + diff --git a/demos/basics/README.md b/demos/basics/README.md index 6509b276e..dc77ce2e2 100644 --- a/demos/basics/README.md +++ b/demos/basics/README.md @@ -1,11 +1,11 @@ # StellarGraph basics - + -These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/stable/demos/basics/ +These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/basics/ -- Loading data into StellarGraph from Pandas. View: [here](loading-pandas.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/basics/loading-pandas.html) -- Loading data into StellarGraph from NetworkX. View: [here](loading-networkx.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/basics/loading-networkx.html) -- Loading and saving data between StellarGraph and Neo4j. View: [here](loading-saving-neo4j.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/basics/loading-saving-neo4j.html) +- Loading data into StellarGraph from Pandas. View: [here](loading-pandas.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/basics/loading-pandas.html) +- Loading data into StellarGraph from NetworkX. View: [here](loading-networkx.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/basics/loading-networkx.html) +- Loading and saving data between StellarGraph and Neo4j. View: [here](loading-saving-neo4j.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/basics/loading-saving-neo4j.html) diff --git a/demos/calibration/README.md b/demos/calibration/README.md index 27910c616..3ee0a1fcf 100644 --- a/demos/calibration/README.md +++ b/demos/calibration/README.md @@ -1,10 +1,10 @@ ## Ensemble learning for graph neural network algorithms - + -These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/stable/demos/calibration/ +These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/calibration/ -- Node Attribute Inference (multi-class) using GraphSAGE and the Pubmed-Diabetes citation network with calibration. View: [here](calibration-pubmed-node-classification.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/calibration/calibration-pubmed-node-classification.html) -- Link prediction example and calibration: GraphSAGE on the PubMed-Diabetes citation dataset. View: [here](calibration-pubmed-link-prediction.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/calibration/calibration-pubmed-link-prediction.html) +- Node Attribute Inference (multi-class) using GraphSAGE and the Pubmed-Diabetes citation network with calibration. View: [here](calibration-pubmed-node-classification.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/calibration/calibration-pubmed-node-classification.html) +- Link prediction example and calibration: GraphSAGE on the PubMed-Diabetes citation dataset. View: [here](calibration-pubmed-link-prediction.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/calibration/calibration-pubmed-link-prediction.html) diff --git a/demos/community_detection/README.md b/demos/community_detection/README.md index 0e9fde8e3..d9183a569 100644 --- a/demos/community_detection/README.md +++ b/demos/community_detection/README.md @@ -1,9 +1,9 @@ # Community detection on a terrorist attack data - + -These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/stable/demos/community_detection/ +These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/community_detection/ -- Comparison of clustering of node embeddings with a traditional community detection method. View: [here](attacks_clustering_analysis.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/community_detection/attacks_clustering_analysis.html) +- Comparison of clustering of node embeddings with a traditional community detection method. View: [here](attacks_clustering_analysis.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/community_detection/attacks_clustering_analysis.html) diff --git a/demos/connector/neo4j/README.md b/demos/connector/neo4j/README.md index d7c5569fb..9cc110c69 100644 --- a/demos/connector/neo4j/README.md +++ b/demos/connector/neo4j/README.md @@ -1,11 +1,11 @@ # Connect to Remote Neo4J Graph Databases - + -These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/stable/demos/connector/neo4j/ +These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/connector/neo4j/ -- Notebook demo on loading Cora dataset into Neo4J Database. View: [here](load-cora-into-neo4j.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/connector/neo4j/load-cora-into-neo4j.html) -- Stellargraph example: directed CORA citation network with directed GraphSAGE and Neo4J.. View: [here](directed-graphsage-on-cora-neo4j-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/connector/neo4j/directed-graphsage-on-cora-neo4j-example.html) -- Undirected GraphSAGE on the CORA citation network using StellarGraph and Neo4j. View: [here](undirected-graphsage-on-cora-neo4j-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/connector/neo4j/undirected-graphsage-on-cora-neo4j-example.html) +- Notebook demo on loading Cora dataset into Neo4J Database. View: [here](load-cora-into-neo4j.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/connector/neo4j/load-cora-into-neo4j.html) +- Stellargraph example: directed CORA citation network with directed GraphSAGE and Neo4J.. View: [here](directed-graphsage-on-cora-neo4j-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/connector/neo4j/directed-graphsage-on-cora-neo4j-example.html) +- Undirected GraphSAGE on the CORA citation network using StellarGraph and Neo4j. View: [here](undirected-graphsage-on-cora-neo4j-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/connector/neo4j/undirected-graphsage-on-cora-neo4j-example.html) diff --git a/demos/embeddings/README.md b/demos/embeddings/README.md index 740ff413d..c72108df8 100644 --- a/demos/embeddings/README.md +++ b/demos/embeddings/README.md @@ -1,18 +1,18 @@ ## Representation learning using StellarGraph - + -These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/stable/demos/embeddings/ +These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/embeddings/ -- Node Representation Learning with attri2vec on Citeseer. View: [here](stellargraph-attri2vec-citeseer.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/embeddings/stellargraph-attri2vec-citeseer.html) -- Graph representation learning through Unsupervised GraphSAGE. View: [here](embeddings-unsupervised-graphsage-cora.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/embeddings/embeddings-unsupervised-graphsage-cora.html) -- GraphWave aglorithm on a barbell graph. View: [here](graphwave-barbell.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/embeddings/graphwave-barbell.html) -- Node representation learning with Node2Vec on Cora. View: [here](stellargraph-node2vec.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/embeddings/stellargraph-node2vec.html) -- Node representation learning with Watch Your Step on Cora. View: [here](watch-your-step-cora-demo.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/embeddings/watch-your-step-cora-demo.html) -- GCN Deep Graph Infomax on MovieLens. View: [here](deep-graph-infomax-blogcatalog3.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/embeddings/deep-graph-infomax-blogcatalog3.html) -- GCN Deep Graph Infomax on MovieLens. View: [here](deep-graph-infomax-aifb.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/embeddings/deep-graph-infomax-aifb.html) -- Node representation learning with Metapath2Vec on BlogCatalog3. View: [here](stellargraph-metapath2vec.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/embeddings/stellargraph-metapath2vec.html) -- GCN Deep Graph Infomax on MovieLens. View: [here](deep-graph-infomax-movielens.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/embeddings/deep-graph-infomax-movielens.html) -- GCN Deep Graph Infomax on CORA. View: [here](deep-graph-infomax-cora.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/embeddings/deep-graph-infomax-cora.html) +- Node Representation Learning with attri2vec on Citeseer. View: [here](stellargraph-attri2vec-citeseer.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/stellargraph-attri2vec-citeseer.html) +- Graph representation learning through Unsupervised GraphSAGE. View: [here](embeddings-unsupervised-graphsage-cora.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/embeddings-unsupervised-graphsage-cora.html) +- GraphWave aglorithm on a barbell graph. View: [here](graphwave-barbell.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/graphwave-barbell.html) +- Node representation learning with Node2Vec on Cora. View: [here](stellargraph-node2vec.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/stellargraph-node2vec.html) +- Node representation learning with Watch Your Step on Cora. View: [here](watch-your-step-cora-demo.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/watch-your-step-cora-demo.html) +- GCN Deep Graph Infomax on MovieLens. View: [here](deep-graph-infomax-blogcatalog3.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/deep-graph-infomax-blogcatalog3.html) +- GCN Deep Graph Infomax on MovieLens. View: [here](deep-graph-infomax-aifb.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/deep-graph-infomax-aifb.html) +- Node representation learning with Metapath2Vec on BlogCatalog3. View: [here](stellargraph-metapath2vec.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/stellargraph-metapath2vec.html) +- GCN Deep Graph Infomax on MovieLens. View: [here](deep-graph-infomax-movielens.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/deep-graph-infomax-movielens.html) +- GCN Deep Graph Infomax on CORA. View: [here](deep-graph-infomax-cora.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/deep-graph-infomax-cora.html) diff --git a/demos/ensembles/README.md b/demos/ensembles/README.md index 1286b39f7..0ce83510a 100644 --- a/demos/ensembles/README.md +++ b/demos/ensembles/README.md @@ -1,10 +1,10 @@ ## Ensemble learning for graph neural network algorithms - + -These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/stable/demos/ensembles/ +These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/ensembles/ -- Stellargraph Ensembles for node attribute inference. View: [here](ensemble-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/ensembles/ensemble-node-classification-example.html) -- StellarGraph Ensemble for link prediction. View: [here](ensemble-link-prediction-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/ensembles/ensemble-link-prediction-example.html) +- Stellargraph Ensembles for node attribute inference. View: [here](ensemble-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/ensembles/ensemble-node-classification-example.html) +- StellarGraph Ensemble for link prediction. View: [here](ensemble-link-prediction-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/ensembles/ensemble-link-prediction-example.html) diff --git a/demos/graph-classification/README.md b/demos/graph-classification/README.md index 00b9b22a8..a05734b8f 100644 --- a/demos/graph-classification/README.md +++ b/demos/graph-classification/README.md @@ -1,10 +1,10 @@ # Graph classification using StellarGraph - + -These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/stable/demos/graph-classification/ +These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/graph-classification/ -- Supervised graph classification example. View: [here](supervised-graph-classification.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/graph-classification/supervised-graph-classification.html) -- Supervised graph classification with Deep Graph Convolutional Neural Networks. View: [here](dgcnn-graph-classification.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/graph-classification/dgcnn-graph-classification.html) +- Supervised graph classification example. View: [here](supervised-graph-classification.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/graph-classification/supervised-graph-classification.html) +- Supervised graph classification with Deep Graph Convolutional Neural Networks. View: [here](dgcnn-graph-classification.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/graph-classification/dgcnn-graph-classification.html) diff --git a/demos/interpretability/README.md b/demos/interpretability/README.md index e190e9c53..d1bc4fc76 100644 --- a/demos/interpretability/README.md +++ b/demos/interpretability/README.md @@ -1,12 +1,12 @@ # Interpretability of node classification results using StellarGraph - + -These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/stable/demos/interpretability/ +These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/interpretability/ -- Interpreting Nodes and Edges by Saliency Maps in GAT. View: [here](gat/node-link-importance-demo-gat.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/interpretability/gat/node-link-importance-demo-gat.html) -- Intepretability on Hateful Twitter Datasets. View: [here](gcn/hateful-twitters-interpretability.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/interpretability/gcn/hateful-twitters-interpretability.html) -- Interpreting Nodes and Edges by Saliency Maps in GCN. View: [here](gcn/node-link-importance-demo-gcn.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/interpretability/gcn/node-link-importance-demo-gcn.html) -- Interpreting Nodes and Edges by Saliency Maps in GCN (sparse). View: [here](gcn/node-link-importance-demo-gcn-sparse.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/interpretability/gcn/node-link-importance-demo-gcn-sparse.html) +- Interpreting Nodes and Edges by Saliency Maps in GAT. View: [here](gat/node-link-importance-demo-gat.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/interpretability/gat/node-link-importance-demo-gat.html) +- Intepretability on Hateful Twitter Datasets. View: [here](gcn/hateful-twitters-interpretability.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/interpretability/gcn/hateful-twitters-interpretability.html) +- Interpreting Nodes and Edges by Saliency Maps in GCN. View: [here](gcn/node-link-importance-demo-gcn.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/interpretability/gcn/node-link-importance-demo-gcn.html) +- Interpreting Nodes and Edges by Saliency Maps in GCN (sparse). View: [here](gcn/node-link-importance-demo-gcn-sparse.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/interpretability/gcn/node-link-importance-demo-gcn-sparse.html) diff --git a/demos/link-prediction/README.md b/demos/link-prediction/README.md index 4b6192705..cefb3dcfa 100644 --- a/demos/link-prediction/README.md +++ b/demos/link-prediction/README.md @@ -1,16 +1,16 @@ # Link prediction using StellarGraph - + -These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/ +These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/ -- Link prediction example: GraphSAGE on the Cora citation dataset. View: [here](graphsage/cora-links-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/graphsage/cora-links-example.html) -- Link prediction with Node2Vec on Cora. View: [here](random-walks/cora-lp-demo.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/random-walks/cora-lp-demo.html) -- Continuous-Time Dynamic Network Embeddings. View: [here](random-walks/ctdne-link-prediction.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/random-walks/ctdne-link-prediction.html) -- Inductive Node Representation Learning through attri2vec. View: [here](attri2vec/stellargraph-attri2vec-DBLP.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/attri2vec/stellargraph-attri2vec-DBLP.html) -- Stellargraph example: Heterogeneous GraphSAGE on the Movielens recommendation dataset. View: [here](hinsage/movielens-recommender.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/hinsage/movielens-recommender.html) -- ComplEx on WN18 and FB15K. View: [here](knowledge-graphs/complex.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/knowledge-graphs/complex.html) -- DistMult on WN18 and FB15K. View: [here](knowledge-graphs/distmult.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/knowledge-graphs/distmult.html) -- Link prediction example: GCN on the Cora citation dataset. View: [here](gcn/cora-gcn-links-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/gcn/cora-gcn-links-example.html) +- Link prediction example: GraphSAGE on the Cora citation dataset. View: [here](graphsage/cora-links-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/graphsage/cora-links-example.html) +- Link prediction with Node2Vec on Cora. View: [here](random-walks/cora-lp-demo.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/random-walks/cora-lp-demo.html) +- Continuous-Time Dynamic Network Embeddings. View: [here](random-walks/ctdne-link-prediction.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/random-walks/ctdne-link-prediction.html) +- Inductive Node Representation Learning through attri2vec. View: [here](attri2vec/stellargraph-attri2vec-DBLP.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/attri2vec/stellargraph-attri2vec-DBLP.html) +- Stellargraph example: Heterogeneous GraphSAGE on the Movielens recommendation dataset. View: [here](hinsage/movielens-recommender.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/hinsage/movielens-recommender.html) +- ComplEx on WN18 and FB15K. View: [here](knowledge-graphs/complex.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/knowledge-graphs/complex.html) +- DistMult on WN18 and FB15K. View: [here](knowledge-graphs/distmult.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/knowledge-graphs/distmult.html) +- Link prediction example: GCN on the Cora citation dataset. View: [here](gcn/cora-gcn-links-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/gcn/cora-gcn-links-example.html) diff --git a/demos/link-prediction/attri2vec/README.md b/demos/link-prediction/attri2vec/README.md index 878b94a1f..b631d8ea2 100644 --- a/demos/link-prediction/attri2vec/README.md +++ b/demos/link-prediction/attri2vec/README.md @@ -1,9 +1,9 @@ # attri2vec Link Prediction for Out-of-sample Nodes - + -These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/attri2vec/ +These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/attri2vec/ -- Inductive Node Representation Learning through attri2vec. View: [here](stellargraph-attri2vec-DBLP.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/attri2vec/stellargraph-attri2vec-DBLP.html) +- Inductive Node Representation Learning through attri2vec. View: [here](stellargraph-attri2vec-DBLP.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/attri2vec/stellargraph-attri2vec-DBLP.html) diff --git a/demos/link-prediction/graphsage/README.md b/demos/link-prediction/graphsage/README.md index b3a2bafb7..6bc0debcb 100644 --- a/demos/link-prediction/graphsage/README.md +++ b/demos/link-prediction/graphsage/README.md @@ -1,9 +1,9 @@ # Graphsage Link Prediction - + -These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/graphsage/ +These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/graphsage/ -- Link prediction example: GraphSAGE on the Cora citation dataset. View: [here](cora-links-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/graphsage/cora-links-example.html) +- Link prediction example: GraphSAGE on the Cora citation dataset. View: [here](cora-links-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/graphsage/cora-links-example.html) diff --git a/demos/link-prediction/hinsage/README.md b/demos/link-prediction/hinsage/README.md index 7c1fd05ca..072eebe20 100644 --- a/demos/link-prediction/hinsage/README.md +++ b/demos/link-prediction/hinsage/README.md @@ -1,9 +1,9 @@ # Hinsage Recommender -- Movielens Example - + -These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/hinsage/ +These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/hinsage/ -- Stellargraph example: Heterogeneous GraphSAGE on the Movielens recommendation dataset. View: [here](movielens-recommender.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/hinsage/movielens-recommender.html) +- Stellargraph example: Heterogeneous GraphSAGE on the Movielens recommendation dataset. View: [here](movielens-recommender.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/hinsage/movielens-recommender.html) diff --git a/demos/link-prediction/random-walks/README.md b/demos/link-prediction/random-walks/README.md index ca14b43bc..b9e08aa76 100644 --- a/demos/link-prediction/random-walks/README.md +++ b/demos/link-prediction/random-walks/README.md @@ -1,10 +1,10 @@ # Link Prediction demo - + -These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/random-walks/ +These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/random-walks/ -- Link prediction with Node2Vec on Cora. View: [here](cora-lp-demo.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/random-walks/cora-lp-demo.html) -- Continuous-Time Dynamic Network Embeddings. View: [here](ctdne-link-prediction.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/random-walks/ctdne-link-prediction.html) +- Link prediction with Node2Vec on Cora. View: [here](cora-lp-demo.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/random-walks/cora-lp-demo.html) +- Continuous-Time Dynamic Network Embeddings. View: [here](ctdne-link-prediction.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/random-walks/ctdne-link-prediction.html) diff --git a/demos/node-classification/README.md b/demos/node-classification/README.md index 5f8eef871..25ee2456b 100644 --- a/demos/node-classification/README.md +++ b/demos/node-classification/README.md @@ -1,20 +1,20 @@ # Node classification using StellarGraph - + -These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/stable/demos/node-classification/ +These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/node-classification/ -- Stellargraph example: Graph Attention Network (GAT) on the CORA citation dataset. View: [here](gat/gat-cora-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/gat/gat-cora-node-classification-example.html) -- Inductive representation learning using GraphSAGE on the Pubmed-Diabetes citation network . View: [here](graphsage/graphsage-pubmed-inductive-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/graphsage/graphsage-pubmed-inductive-node-classification-example.html) -- Stellargraph example: Fully directed GraphSAGE on a directed CORA citation network. View: [here](graphsage/directed-graphsage-on-cora-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/graphsage/directed-graphsage-on-cora-example.html) -- Stellargraph example: GraphSAGE on the CORA citation network. View: [here](graphsage/graphsage-cora-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/graphsage/graphsage-cora-node-classification-example.html) -- Stellargraph example: Personalised Propagation of Neural Predictions (PPNP) and Approximate PPNP (APPNP) on the CORA citation dataset. View: [here](ppnp/ppnp-cora-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/ppnp/ppnp-cora-node-classification-example.html) -- Cluster-GCN for node classification. View: [here](cluster-gcn/cluster-gcn-node-classification.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/cluster-gcn/cluster-gcn-node-classification.html) -- Node2Vec with weighted random walks. View: [here](node2vec/stellargraph-node2vec-weighted-random-walks.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/node2vec/stellargraph-node2vec-weighted-random-walks.html) -- Node classification with Node2Vec on Cora. View: [here](node2vec/stellargraph-node2vec-node-classification.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/node2vec/stellargraph-node2vec-node-classification.html) -- Stellargraph example: Simplified Graph Convolutions (SGC) on the CORA citation dataset. View: [here](sgc/sgc-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/sgc/sgc-node-classification-example.html) -- Node Representation Learning with attri2vec on Citeseer. View: [here](attri2vec/attri2vec-citeseer-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/attri2vec/attri2vec-citeseer-node-classification-example.html) -- Stellargraph example: Relational Graph Convolutional Network (RGCN) on the AIFB relational dataset. View: [here](rgcn/rgcn-aifb-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/rgcn/rgcn-aifb-node-classification-example.html) -- Graph Convolutional Network (GCN) on the CORA citation dataset. View: [here](gcn/gcn-cora-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/gcn/gcn-cora-node-classification-example.html) +- Stellargraph example: Graph Attention Network (GAT) on the CORA citation dataset. View: [here](gat/gat-cora-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/gat/gat-cora-node-classification-example.html) +- Inductive representation learning using GraphSAGE on the Pubmed-Diabetes citation network . View: [here](graphsage/graphsage-pubmed-inductive-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/graphsage-pubmed-inductive-node-classification-example.html) +- Stellargraph example: Fully directed GraphSAGE on a directed CORA citation network. View: [here](graphsage/directed-graphsage-on-cora-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/directed-graphsage-on-cora-example.html) +- Stellargraph example: GraphSAGE on the CORA citation network. View: [here](graphsage/graphsage-cora-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/graphsage-cora-node-classification-example.html) +- Stellargraph example: Personalised Propagation of Neural Predictions (PPNP) and Approximate PPNP (APPNP) on the CORA citation dataset. View: [here](ppnp/ppnp-cora-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/ppnp/ppnp-cora-node-classification-example.html) +- Cluster-GCN for node classification. View: [here](cluster-gcn/cluster-gcn-node-classification.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/cluster-gcn/cluster-gcn-node-classification.html) +- Node2Vec with weighted random walks. View: [here](node2vec/stellargraph-node2vec-weighted-random-walks.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/node2vec/stellargraph-node2vec-weighted-random-walks.html) +- Node classification with Node2Vec on Cora. View: [here](node2vec/stellargraph-node2vec-node-classification.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/node2vec/stellargraph-node2vec-node-classification.html) +- Stellargraph example: Simplified Graph Convolutions (SGC) on the CORA citation dataset. View: [here](sgc/sgc-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/sgc/sgc-node-classification-example.html) +- Node Representation Learning with attri2vec on Citeseer. View: [here](attri2vec/attri2vec-citeseer-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/attri2vec/attri2vec-citeseer-node-classification-example.html) +- Stellargraph example: Relational Graph Convolutional Network (RGCN) on the AIFB relational dataset. View: [here](rgcn/rgcn-aifb-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/rgcn/rgcn-aifb-node-classification-example.html) +- Graph Convolutional Network (GCN) on the CORA citation dataset. View: [here](gcn/gcn-cora-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/gcn/gcn-cora-node-classification-example.html) diff --git a/demos/node-classification/attri2vec/README.md b/demos/node-classification/attri2vec/README.md index 938e90b67..4a7276bc9 100644 --- a/demos/node-classification/attri2vec/README.md +++ b/demos/node-classification/attri2vec/README.md @@ -1,9 +1,9 @@ ## Node classification using attri2vec [1] - + -These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/stable/demos/node-classification/attri2vec/ +These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/node-classification/attri2vec/ -- Node Representation Learning with attri2vec on Citeseer. View: [here](attri2vec-citeseer-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/attri2vec/attri2vec-citeseer-node-classification-example.html) +- Node Representation Learning with attri2vec on Citeseer. View: [here](attri2vec-citeseer-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/attri2vec/attri2vec-citeseer-node-classification-example.html) diff --git a/demos/node-classification/gat/README.md b/demos/node-classification/gat/README.md index b4407736f..91b7a3316 100644 --- a/demos/node-classification/gat/README.md +++ b/demos/node-classification/gat/README.md @@ -1,9 +1,9 @@ # GAT for Node Classification - + -These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/stable/demos/node-classification/gat/ +These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/node-classification/gat/ -- Stellargraph example: Graph Attention Network (GAT) on the CORA citation dataset. View: [here](gat-cora-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/gat/gat-cora-node-classification-example.html) +- Stellargraph example: Graph Attention Network (GAT) on the CORA citation dataset. View: [here](gat-cora-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/gat/gat-cora-node-classification-example.html) diff --git a/demos/node-classification/gcn/README.md b/demos/node-classification/gcn/README.md index f994fa066..f3f5971ea 100644 --- a/demos/node-classification/gcn/README.md +++ b/demos/node-classification/gcn/README.md @@ -1,9 +1,9 @@ # GCN for Node Classification - + -These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/stable/demos/node-classification/gcn/ +These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/node-classification/gcn/ -- Graph Convolutional Network (GCN) on the CORA citation dataset. View: [here](gcn-cora-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/gcn/gcn-cora-node-classification-example.html) +- Graph Convolutional Network (GCN) on the CORA citation dataset. View: [here](gcn-cora-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/gcn/gcn-cora-node-classification-example.html) diff --git a/demos/node-classification/graphsage/README.md b/demos/node-classification/graphsage/README.md index 3956fb134..72ba29c04 100644 --- a/demos/node-classification/graphsage/README.md +++ b/demos/node-classification/graphsage/README.md @@ -1,11 +1,11 @@ # GraphSAGE Node Classification - + -These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/stable/demos/node-classification/graphsage/ +These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/ -- Inductive representation learning using GraphSAGE on the Pubmed-Diabetes citation network . View: [here](graphsage-pubmed-inductive-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/graphsage/graphsage-pubmed-inductive-node-classification-example.html) -- Stellargraph example: Fully directed GraphSAGE on a directed CORA citation network. View: [here](directed-graphsage-on-cora-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/graphsage/directed-graphsage-on-cora-example.html) -- Stellargraph example: GraphSAGE on the CORA citation network. View: [here](graphsage-cora-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/graphsage/graphsage-cora-node-classification-example.html) +- Inductive representation learning using GraphSAGE on the Pubmed-Diabetes citation network . View: [here](graphsage-pubmed-inductive-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/graphsage-pubmed-inductive-node-classification-example.html) +- Stellargraph example: Fully directed GraphSAGE on a directed CORA citation network. View: [here](directed-graphsage-on-cora-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/directed-graphsage-on-cora-example.html) +- Stellargraph example: GraphSAGE on the CORA citation network. View: [here](graphsage-cora-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/graphsage-cora-node-classification-example.html) diff --git a/demos/node-classification/hinsage/README.md b/demos/node-classification/hinsage/README.md index 935526436..4a51cb626 100644 --- a/demos/node-classification/hinsage/README.md +++ b/demos/node-classification/hinsage/README.md @@ -1,9 +1,9 @@ # HinSAGE Node Classification - + -These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/stable/demos/node-classification/hinsage/ +These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/node-classification/hinsage/ diff --git a/demos/node-classification/node2vec/README.md b/demos/node-classification/node2vec/README.md index 2deafcc60..ea03b5f67 100644 --- a/demos/node-classification/node2vec/README.md +++ b/demos/node-classification/node2vec/README.md @@ -1,10 +1,10 @@ ## Node classification using Node2Vec [1] - + -These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/stable/demos/node-classification/node2vec/ +These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/node-classification/node2vec/ -- Node2Vec with weighted random walks. View: [here](stellargraph-node2vec-weighted-random-walks.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/node2vec/stellargraph-node2vec-weighted-random-walks.html) -- Node classification with Node2Vec on Cora. View: [here](stellargraph-node2vec-node-classification.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/node2vec/stellargraph-node2vec-node-classification.html) +- Node2Vec with weighted random walks. View: [here](stellargraph-node2vec-weighted-random-walks.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/node2vec/stellargraph-node2vec-weighted-random-walks.html) +- Node classification with Node2Vec on Cora. View: [here](stellargraph-node2vec-node-classification.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/node2vec/stellargraph-node2vec-node-classification.html) diff --git a/demos/node-classification/ppnp/README.md b/demos/node-classification/ppnp/README.md index f464352c2..a8af1b52a 100644 --- a/demos/node-classification/ppnp/README.md +++ b/demos/node-classification/ppnp/README.md @@ -1,9 +1,9 @@ # PPNP and APPNP for Node Classification - + -These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/stable/demos/node-classification/ppnp/ +These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/node-classification/ppnp/ -- Stellargraph example: Personalised Propagation of Neural Predictions (PPNP) and Approximate PPNP (APPNP) on the CORA citation dataset. View: [here](ppnp-cora-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/ppnp/ppnp-cora-node-classification-example.html) +- Stellargraph example: Personalised Propagation of Neural Predictions (PPNP) and Approximate PPNP (APPNP) on the CORA citation dataset. View: [here](ppnp-cora-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/ppnp/ppnp-cora-node-classification-example.html) diff --git a/scripts/demo_indexing.py b/scripts/demo_indexing.py index 0a0a82b2d..f42d9d182 100644 --- a/scripts/demo_indexing.py +++ b/scripts/demo_indexing.py @@ -32,7 +32,8 @@ HTML_INDENT = 2 LINK_DEFAULT_TEXT = "demo" TRUE_TEXT = "yes" -DOC_URL_BASE = "https://stellargraph.readthedocs.io/en/stable" +# FIXME: this should point to stable, not latest +DOC_URL_BASE = "https://stellargraph.readthedocs.io/en/latest" AUTOGENERATED_PROMPT = f"autogenerated by {__file__}, edit that file instead of this location" DOCS_LINK_SEPARATOR = "\n\n" From 0ff59d087350d95ab71b6bc3bafcb7257ca14e86 Mon Sep 17 00:00:00 2001 From: Huon Wilson Date: Fri, 1 May 2020 14:47:50 +1000 Subject: [PATCH 04/43] Tweak formatting --- demos/basics/README.md | 6 ++--- demos/calibration/README.md | 4 ++-- demos/community_detection/README.md | 2 +- demos/connector/neo4j/README.md | 6 ++--- demos/embeddings/README.md | 20 ++++++++-------- demos/ensembles/README.md | 4 ++-- demos/graph-classification/README.md | 4 ++-- demos/interpretability/README.md | 8 +++---- demos/link-prediction/README.md | 16 ++++++------- demos/link-prediction/attri2vec/README.md | 2 +- demos/link-prediction/graphsage/README.md | 2 +- demos/link-prediction/hinsage/README.md | 2 +- demos/link-prediction/random-walks/README.md | 4 ++-- demos/node-classification/README.md | 24 +++++++++---------- demos/node-classification/attri2vec/README.md | 2 +- demos/node-classification/gat/README.md | 2 +- demos/node-classification/gcn/README.md | 2 +- demos/node-classification/graphsage/README.md | 6 ++--- demos/node-classification/node2vec/README.md | 4 ++-- demos/node-classification/ppnp/README.md | 2 +- scripts/demo_indexing.py | 2 +- 21 files changed, 62 insertions(+), 62 deletions(-) diff --git a/demos/basics/README.md b/demos/basics/README.md index dc77ce2e2..8aeab81fc 100644 --- a/demos/basics/README.md +++ b/demos/basics/README.md @@ -5,7 +5,7 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/basics/ -- Loading data into StellarGraph from Pandas. View: [here](loading-pandas.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/basics/loading-pandas.html) -- Loading data into StellarGraph from NetworkX. View: [here](loading-networkx.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/basics/loading-networkx.html) -- Loading and saving data between StellarGraph and Neo4j. View: [here](loading-saving-neo4j.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/basics/loading-saving-neo4j.html) +- Loading data into StellarGraph from Pandas. **View this demo**: [here](loading-pandas.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/basics/loading-pandas.html) +- Loading data into StellarGraph from NetworkX. **View this demo**: [here](loading-networkx.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/basics/loading-networkx.html) +- Loading and saving data between StellarGraph and Neo4j. **View this demo**: [here](loading-saving-neo4j.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/basics/loading-saving-neo4j.html) diff --git a/demos/calibration/README.md b/demos/calibration/README.md index 3ee0a1fcf..800fa01d6 100644 --- a/demos/calibration/README.md +++ b/demos/calibration/README.md @@ -5,6 +5,6 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/calibration/ -- Node Attribute Inference (multi-class) using GraphSAGE and the Pubmed-Diabetes citation network with calibration. View: [here](calibration-pubmed-node-classification.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/calibration/calibration-pubmed-node-classification.html) -- Link prediction example and calibration: GraphSAGE on the PubMed-Diabetes citation dataset. View: [here](calibration-pubmed-link-prediction.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/calibration/calibration-pubmed-link-prediction.html) +- Node Attribute Inference (multi-class) using GraphSAGE and the Pubmed-Diabetes citation network with calibration. **View this demo**: [here](calibration-pubmed-node-classification.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/calibration/calibration-pubmed-node-classification.html) +- Link prediction example and calibration: GraphSAGE on the PubMed-Diabetes citation dataset. **View this demo**: [here](calibration-pubmed-link-prediction.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/calibration/calibration-pubmed-link-prediction.html) diff --git a/demos/community_detection/README.md b/demos/community_detection/README.md index d9183a569..60d817775 100644 --- a/demos/community_detection/README.md +++ b/demos/community_detection/README.md @@ -5,5 +5,5 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/community_detection/ -- Comparison of clustering of node embeddings with a traditional community detection method. View: [here](attacks_clustering_analysis.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/community_detection/attacks_clustering_analysis.html) +- Comparison of clustering of node embeddings with a traditional community detection method. **View this demo**: [here](attacks_clustering_analysis.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/community_detection/attacks_clustering_analysis.html) diff --git a/demos/connector/neo4j/README.md b/demos/connector/neo4j/README.md index 9cc110c69..dc1eec57a 100644 --- a/demos/connector/neo4j/README.md +++ b/demos/connector/neo4j/README.md @@ -5,7 +5,7 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/connector/neo4j/ -- Notebook demo on loading Cora dataset into Neo4J Database. View: [here](load-cora-into-neo4j.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/connector/neo4j/load-cora-into-neo4j.html) -- Stellargraph example: directed CORA citation network with directed GraphSAGE and Neo4J.. View: [here](directed-graphsage-on-cora-neo4j-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/connector/neo4j/directed-graphsage-on-cora-neo4j-example.html) -- Undirected GraphSAGE on the CORA citation network using StellarGraph and Neo4j. View: [here](undirected-graphsage-on-cora-neo4j-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/connector/neo4j/undirected-graphsage-on-cora-neo4j-example.html) +- Notebook demo on loading Cora dataset into Neo4J Database. **View this demo**: [here](load-cora-into-neo4j.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/connector/neo4j/load-cora-into-neo4j.html) +- Stellargraph example: directed CORA citation network with directed GraphSAGE and Neo4J.. **View this demo**: [here](directed-graphsage-on-cora-neo4j-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/connector/neo4j/directed-graphsage-on-cora-neo4j-example.html) +- Undirected GraphSAGE on the CORA citation network using StellarGraph and Neo4j. **View this demo**: [here](undirected-graphsage-on-cora-neo4j-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/connector/neo4j/undirected-graphsage-on-cora-neo4j-example.html) diff --git a/demos/embeddings/README.md b/demos/embeddings/README.md index c72108df8..9ae1f7db4 100644 --- a/demos/embeddings/README.md +++ b/demos/embeddings/README.md @@ -5,14 +5,14 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/embeddings/ -- Node Representation Learning with attri2vec on Citeseer. View: [here](stellargraph-attri2vec-citeseer.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/stellargraph-attri2vec-citeseer.html) -- Graph representation learning through Unsupervised GraphSAGE. View: [here](embeddings-unsupervised-graphsage-cora.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/embeddings-unsupervised-graphsage-cora.html) -- GraphWave aglorithm on a barbell graph. View: [here](graphwave-barbell.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/graphwave-barbell.html) -- Node representation learning with Node2Vec on Cora. View: [here](stellargraph-node2vec.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/stellargraph-node2vec.html) -- Node representation learning with Watch Your Step on Cora. View: [here](watch-your-step-cora-demo.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/watch-your-step-cora-demo.html) -- GCN Deep Graph Infomax on MovieLens. View: [here](deep-graph-infomax-blogcatalog3.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/deep-graph-infomax-blogcatalog3.html) -- GCN Deep Graph Infomax on MovieLens. View: [here](deep-graph-infomax-aifb.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/deep-graph-infomax-aifb.html) -- Node representation learning with Metapath2Vec on BlogCatalog3. View: [here](stellargraph-metapath2vec.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/stellargraph-metapath2vec.html) -- GCN Deep Graph Infomax on MovieLens. View: [here](deep-graph-infomax-movielens.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/deep-graph-infomax-movielens.html) -- GCN Deep Graph Infomax on CORA. View: [here](deep-graph-infomax-cora.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/deep-graph-infomax-cora.html) +- Node Representation Learning with attri2vec on Citeseer. **View this demo**: [here](stellargraph-attri2vec-citeseer.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/stellargraph-attri2vec-citeseer.html) +- Graph representation learning through Unsupervised GraphSAGE. **View this demo**: [here](embeddings-unsupervised-graphsage-cora.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/embeddings-unsupervised-graphsage-cora.html) +- GraphWave aglorithm on a barbell graph. **View this demo**: [here](graphwave-barbell.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/graphwave-barbell.html) +- Node representation learning with Node2Vec on Cora. **View this demo**: [here](stellargraph-node2vec.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/stellargraph-node2vec.html) +- Node representation learning with Watch Your Step on Cora. **View this demo**: [here](watch-your-step-cora-demo.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/watch-your-step-cora-demo.html) +- GCN Deep Graph Infomax on MovieLens. **View this demo**: [here](deep-graph-infomax-blogcatalog3.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/deep-graph-infomax-blogcatalog3.html) +- GCN Deep Graph Infomax on MovieLens. **View this demo**: [here](deep-graph-infomax-aifb.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/deep-graph-infomax-aifb.html) +- Node representation learning with Metapath2Vec on BlogCatalog3. **View this demo**: [here](stellargraph-metapath2vec.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/stellargraph-metapath2vec.html) +- GCN Deep Graph Infomax on MovieLens. **View this demo**: [here](deep-graph-infomax-movielens.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/deep-graph-infomax-movielens.html) +- GCN Deep Graph Infomax on CORA. **View this demo**: [here](deep-graph-infomax-cora.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/deep-graph-infomax-cora.html) diff --git a/demos/ensembles/README.md b/demos/ensembles/README.md index 0ce83510a..1136bac2b 100644 --- a/demos/ensembles/README.md +++ b/demos/ensembles/README.md @@ -5,6 +5,6 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/ensembles/ -- Stellargraph Ensembles for node attribute inference. View: [here](ensemble-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/ensembles/ensemble-node-classification-example.html) -- StellarGraph Ensemble for link prediction. View: [here](ensemble-link-prediction-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/ensembles/ensemble-link-prediction-example.html) +- Stellargraph Ensembles for node attribute inference. **View this demo**: [here](ensemble-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/ensembles/ensemble-node-classification-example.html) +- StellarGraph Ensemble for link prediction. **View this demo**: [here](ensemble-link-prediction-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/ensembles/ensemble-link-prediction-example.html) diff --git a/demos/graph-classification/README.md b/demos/graph-classification/README.md index a05734b8f..bdfe4475b 100644 --- a/demos/graph-classification/README.md +++ b/demos/graph-classification/README.md @@ -5,6 +5,6 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/graph-classification/ -- Supervised graph classification example. View: [here](supervised-graph-classification.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/graph-classification/supervised-graph-classification.html) -- Supervised graph classification with Deep Graph Convolutional Neural Networks. View: [here](dgcnn-graph-classification.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/graph-classification/dgcnn-graph-classification.html) +- Supervised graph classification example. **View this demo**: [here](supervised-graph-classification.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/graph-classification/supervised-graph-classification.html) +- Supervised graph classification with Deep Graph Convolutional Neural Networks. **View this demo**: [here](dgcnn-graph-classification.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/graph-classification/dgcnn-graph-classification.html) diff --git a/demos/interpretability/README.md b/demos/interpretability/README.md index d1bc4fc76..94adc5953 100644 --- a/demos/interpretability/README.md +++ b/demos/interpretability/README.md @@ -5,8 +5,8 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/interpretability/ -- Interpreting Nodes and Edges by Saliency Maps in GAT. View: [here](gat/node-link-importance-demo-gat.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/interpretability/gat/node-link-importance-demo-gat.html) -- Intepretability on Hateful Twitter Datasets. View: [here](gcn/hateful-twitters-interpretability.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/interpretability/gcn/hateful-twitters-interpretability.html) -- Interpreting Nodes and Edges by Saliency Maps in GCN. View: [here](gcn/node-link-importance-demo-gcn.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/interpretability/gcn/node-link-importance-demo-gcn.html) -- Interpreting Nodes and Edges by Saliency Maps in GCN (sparse). View: [here](gcn/node-link-importance-demo-gcn-sparse.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/interpretability/gcn/node-link-importance-demo-gcn-sparse.html) +- Interpreting Nodes and Edges by Saliency Maps in GAT. **View this demo**: [here](gat/node-link-importance-demo-gat.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/interpretability/gat/node-link-importance-demo-gat.html) +- Intepretability on Hateful Twitter Datasets. **View this demo**: [here](gcn/hateful-twitters-interpretability.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/interpretability/gcn/hateful-twitters-interpretability.html) +- Interpreting Nodes and Edges by Saliency Maps in GCN. **View this demo**: [here](gcn/node-link-importance-demo-gcn.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/interpretability/gcn/node-link-importance-demo-gcn.html) +- Interpreting Nodes and Edges by Saliency Maps in GCN (sparse). **View this demo**: [here](gcn/node-link-importance-demo-gcn-sparse.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/interpretability/gcn/node-link-importance-demo-gcn-sparse.html) diff --git a/demos/link-prediction/README.md b/demos/link-prediction/README.md index cefb3dcfa..41491b389 100644 --- a/demos/link-prediction/README.md +++ b/demos/link-prediction/README.md @@ -5,12 +5,12 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/ -- Link prediction example: GraphSAGE on the Cora citation dataset. View: [here](graphsage/cora-links-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/graphsage/cora-links-example.html) -- Link prediction with Node2Vec on Cora. View: [here](random-walks/cora-lp-demo.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/random-walks/cora-lp-demo.html) -- Continuous-Time Dynamic Network Embeddings. View: [here](random-walks/ctdne-link-prediction.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/random-walks/ctdne-link-prediction.html) -- Inductive Node Representation Learning through attri2vec. View: [here](attri2vec/stellargraph-attri2vec-DBLP.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/attri2vec/stellargraph-attri2vec-DBLP.html) -- Stellargraph example: Heterogeneous GraphSAGE on the Movielens recommendation dataset. View: [here](hinsage/movielens-recommender.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/hinsage/movielens-recommender.html) -- ComplEx on WN18 and FB15K. View: [here](knowledge-graphs/complex.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/knowledge-graphs/complex.html) -- DistMult on WN18 and FB15K. View: [here](knowledge-graphs/distmult.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/knowledge-graphs/distmult.html) -- Link prediction example: GCN on the Cora citation dataset. View: [here](gcn/cora-gcn-links-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/gcn/cora-gcn-links-example.html) +- Link prediction example: GraphSAGE on the Cora citation dataset. **View this demo**: [here](graphsage/cora-links-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/graphsage/cora-links-example.html) +- Link prediction with Node2Vec on Cora. **View this demo**: [here](random-walks/cora-lp-demo.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/random-walks/cora-lp-demo.html) +- Continuous-Time Dynamic Network Embeddings. **View this demo**: [here](random-walks/ctdne-link-prediction.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/random-walks/ctdne-link-prediction.html) +- Inductive Node Representation Learning through attri2vec. **View this demo**: [here](attri2vec/stellargraph-attri2vec-DBLP.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/attri2vec/stellargraph-attri2vec-DBLP.html) +- Stellargraph example: Heterogeneous GraphSAGE on the Movielens recommendation dataset. **View this demo**: [here](hinsage/movielens-recommender.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/hinsage/movielens-recommender.html) +- ComplEx on WN18 and FB15K. **View this demo**: [here](knowledge-graphs/complex.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/knowledge-graphs/complex.html) +- DistMult on WN18 and FB15K. **View this demo**: [here](knowledge-graphs/distmult.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/knowledge-graphs/distmult.html) +- Link prediction example: GCN on the Cora citation dataset. **View this demo**: [here](gcn/cora-gcn-links-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/gcn/cora-gcn-links-example.html) diff --git a/demos/link-prediction/attri2vec/README.md b/demos/link-prediction/attri2vec/README.md index b631d8ea2..8fdf32bc8 100644 --- a/demos/link-prediction/attri2vec/README.md +++ b/demos/link-prediction/attri2vec/README.md @@ -5,5 +5,5 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/attri2vec/ -- Inductive Node Representation Learning through attri2vec. View: [here](stellargraph-attri2vec-DBLP.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/attri2vec/stellargraph-attri2vec-DBLP.html) +- Inductive Node Representation Learning through attri2vec. **View this demo**: [here](stellargraph-attri2vec-DBLP.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/attri2vec/stellargraph-attri2vec-DBLP.html) diff --git a/demos/link-prediction/graphsage/README.md b/demos/link-prediction/graphsage/README.md index 6bc0debcb..854f90951 100644 --- a/demos/link-prediction/graphsage/README.md +++ b/demos/link-prediction/graphsage/README.md @@ -5,5 +5,5 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/graphsage/ -- Link prediction example: GraphSAGE on the Cora citation dataset. View: [here](cora-links-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/graphsage/cora-links-example.html) +- Link prediction example: GraphSAGE on the Cora citation dataset. **View this demo**: [here](cora-links-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/graphsage/cora-links-example.html) diff --git a/demos/link-prediction/hinsage/README.md b/demos/link-prediction/hinsage/README.md index 072eebe20..06991122a 100644 --- a/demos/link-prediction/hinsage/README.md +++ b/demos/link-prediction/hinsage/README.md @@ -5,5 +5,5 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/hinsage/ -- Stellargraph example: Heterogeneous GraphSAGE on the Movielens recommendation dataset. View: [here](movielens-recommender.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/hinsage/movielens-recommender.html) +- Stellargraph example: Heterogeneous GraphSAGE on the Movielens recommendation dataset. **View this demo**: [here](movielens-recommender.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/hinsage/movielens-recommender.html) diff --git a/demos/link-prediction/random-walks/README.md b/demos/link-prediction/random-walks/README.md index b9e08aa76..b5edceed3 100644 --- a/demos/link-prediction/random-walks/README.md +++ b/demos/link-prediction/random-walks/README.md @@ -5,6 +5,6 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/random-walks/ -- Link prediction with Node2Vec on Cora. View: [here](cora-lp-demo.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/random-walks/cora-lp-demo.html) -- Continuous-Time Dynamic Network Embeddings. View: [here](ctdne-link-prediction.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/random-walks/ctdne-link-prediction.html) +- Link prediction with Node2Vec on Cora. **View this demo**: [here](cora-lp-demo.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/random-walks/cora-lp-demo.html) +- Continuous-Time Dynamic Network Embeddings. **View this demo**: [here](ctdne-link-prediction.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/random-walks/ctdne-link-prediction.html) diff --git a/demos/node-classification/README.md b/demos/node-classification/README.md index 25ee2456b..18bb0167a 100644 --- a/demos/node-classification/README.md +++ b/demos/node-classification/README.md @@ -5,16 +5,16 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/node-classification/ -- Stellargraph example: Graph Attention Network (GAT) on the CORA citation dataset. View: [here](gat/gat-cora-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/gat/gat-cora-node-classification-example.html) -- Inductive representation learning using GraphSAGE on the Pubmed-Diabetes citation network . View: [here](graphsage/graphsage-pubmed-inductive-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/graphsage-pubmed-inductive-node-classification-example.html) -- Stellargraph example: Fully directed GraphSAGE on a directed CORA citation network. View: [here](graphsage/directed-graphsage-on-cora-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/directed-graphsage-on-cora-example.html) -- Stellargraph example: GraphSAGE on the CORA citation network. View: [here](graphsage/graphsage-cora-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/graphsage-cora-node-classification-example.html) -- Stellargraph example: Personalised Propagation of Neural Predictions (PPNP) and Approximate PPNP (APPNP) on the CORA citation dataset. View: [here](ppnp/ppnp-cora-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/ppnp/ppnp-cora-node-classification-example.html) -- Cluster-GCN for node classification. View: [here](cluster-gcn/cluster-gcn-node-classification.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/cluster-gcn/cluster-gcn-node-classification.html) -- Node2Vec with weighted random walks. View: [here](node2vec/stellargraph-node2vec-weighted-random-walks.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/node2vec/stellargraph-node2vec-weighted-random-walks.html) -- Node classification with Node2Vec on Cora. View: [here](node2vec/stellargraph-node2vec-node-classification.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/node2vec/stellargraph-node2vec-node-classification.html) -- Stellargraph example: Simplified Graph Convolutions (SGC) on the CORA citation dataset. View: [here](sgc/sgc-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/sgc/sgc-node-classification-example.html) -- Node Representation Learning with attri2vec on Citeseer. View: [here](attri2vec/attri2vec-citeseer-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/attri2vec/attri2vec-citeseer-node-classification-example.html) -- Stellargraph example: Relational Graph Convolutional Network (RGCN) on the AIFB relational dataset. View: [here](rgcn/rgcn-aifb-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/rgcn/rgcn-aifb-node-classification-example.html) -- Graph Convolutional Network (GCN) on the CORA citation dataset. View: [here](gcn/gcn-cora-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/gcn/gcn-cora-node-classification-example.html) +- Stellargraph example: Graph Attention Network (GAT) on the CORA citation dataset. **View this demo**: [here](gat/gat-cora-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/gat/gat-cora-node-classification-example.html) +- Inductive representation learning using GraphSAGE on the Pubmed-Diabetes citation network . **View this demo**: [here](graphsage/graphsage-pubmed-inductive-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/graphsage-pubmed-inductive-node-classification-example.html) +- Stellargraph example: Fully directed GraphSAGE on a directed CORA citation network. **View this demo**: [here](graphsage/directed-graphsage-on-cora-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/directed-graphsage-on-cora-example.html) +- Stellargraph example: GraphSAGE on the CORA citation network. **View this demo**: [here](graphsage/graphsage-cora-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/graphsage-cora-node-classification-example.html) +- Stellargraph example: Personalised Propagation of Neural Predictions (PPNP) and Approximate PPNP (APPNP) on the CORA citation dataset. **View this demo**: [here](ppnp/ppnp-cora-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/ppnp/ppnp-cora-node-classification-example.html) +- Cluster-GCN for node classification. **View this demo**: [here](cluster-gcn/cluster-gcn-node-classification.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/cluster-gcn/cluster-gcn-node-classification.html) +- Node2Vec with weighted random walks. **View this demo**: [here](node2vec/stellargraph-node2vec-weighted-random-walks.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/node2vec/stellargraph-node2vec-weighted-random-walks.html) +- Node classification with Node2Vec on Cora. **View this demo**: [here](node2vec/stellargraph-node2vec-node-classification.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/node2vec/stellargraph-node2vec-node-classification.html) +- Stellargraph example: Simplified Graph Convolutions (SGC) on the CORA citation dataset. **View this demo**: [here](sgc/sgc-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/sgc/sgc-node-classification-example.html) +- Node Representation Learning with attri2vec on Citeseer. **View this demo**: [here](attri2vec/attri2vec-citeseer-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/attri2vec/attri2vec-citeseer-node-classification-example.html) +- Stellargraph example: Relational Graph Convolutional Network (RGCN) on the AIFB relational dataset. **View this demo**: [here](rgcn/rgcn-aifb-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/rgcn/rgcn-aifb-node-classification-example.html) +- Graph Convolutional Network (GCN) on the CORA citation dataset. **View this demo**: [here](gcn/gcn-cora-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/gcn/gcn-cora-node-classification-example.html) diff --git a/demos/node-classification/attri2vec/README.md b/demos/node-classification/attri2vec/README.md index 4a7276bc9..1a46a3318 100644 --- a/demos/node-classification/attri2vec/README.md +++ b/demos/node-classification/attri2vec/README.md @@ -5,5 +5,5 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/node-classification/attri2vec/ -- Node Representation Learning with attri2vec on Citeseer. View: [here](attri2vec-citeseer-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/attri2vec/attri2vec-citeseer-node-classification-example.html) +- Node Representation Learning with attri2vec on Citeseer. **View this demo**: [here](attri2vec-citeseer-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/attri2vec/attri2vec-citeseer-node-classification-example.html) diff --git a/demos/node-classification/gat/README.md b/demos/node-classification/gat/README.md index 91b7a3316..c63db9b76 100644 --- a/demos/node-classification/gat/README.md +++ b/demos/node-classification/gat/README.md @@ -5,5 +5,5 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/node-classification/gat/ -- Stellargraph example: Graph Attention Network (GAT) on the CORA citation dataset. View: [here](gat-cora-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/gat/gat-cora-node-classification-example.html) +- Stellargraph example: Graph Attention Network (GAT) on the CORA citation dataset. **View this demo**: [here](gat-cora-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/gat/gat-cora-node-classification-example.html) diff --git a/demos/node-classification/gcn/README.md b/demos/node-classification/gcn/README.md index f3f5971ea..5e37f53cc 100644 --- a/demos/node-classification/gcn/README.md +++ b/demos/node-classification/gcn/README.md @@ -5,5 +5,5 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/node-classification/gcn/ -- Graph Convolutional Network (GCN) on the CORA citation dataset. View: [here](gcn-cora-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/gcn/gcn-cora-node-classification-example.html) +- Graph Convolutional Network (GCN) on the CORA citation dataset. **View this demo**: [here](gcn-cora-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/gcn/gcn-cora-node-classification-example.html) diff --git a/demos/node-classification/graphsage/README.md b/demos/node-classification/graphsage/README.md index 72ba29c04..3b5e801ee 100644 --- a/demos/node-classification/graphsage/README.md +++ b/demos/node-classification/graphsage/README.md @@ -5,7 +5,7 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/ -- Inductive representation learning using GraphSAGE on the Pubmed-Diabetes citation network . View: [here](graphsage-pubmed-inductive-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/graphsage-pubmed-inductive-node-classification-example.html) -- Stellargraph example: Fully directed GraphSAGE on a directed CORA citation network. View: [here](directed-graphsage-on-cora-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/directed-graphsage-on-cora-example.html) -- Stellargraph example: GraphSAGE on the CORA citation network. View: [here](graphsage-cora-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/graphsage-cora-node-classification-example.html) +- Inductive representation learning using GraphSAGE on the Pubmed-Diabetes citation network . **View this demo**: [here](graphsage-pubmed-inductive-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/graphsage-pubmed-inductive-node-classification-example.html) +- Stellargraph example: Fully directed GraphSAGE on a directed CORA citation network. **View this demo**: [here](directed-graphsage-on-cora-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/directed-graphsage-on-cora-example.html) +- Stellargraph example: GraphSAGE on the CORA citation network. **View this demo**: [here](graphsage-cora-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/graphsage-cora-node-classification-example.html) diff --git a/demos/node-classification/node2vec/README.md b/demos/node-classification/node2vec/README.md index ea03b5f67..3b7171c79 100644 --- a/demos/node-classification/node2vec/README.md +++ b/demos/node-classification/node2vec/README.md @@ -5,6 +5,6 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/node-classification/node2vec/ -- Node2Vec with weighted random walks. View: [here](stellargraph-node2vec-weighted-random-walks.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/node2vec/stellargraph-node2vec-weighted-random-walks.html) -- Node classification with Node2Vec on Cora. View: [here](stellargraph-node2vec-node-classification.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/node2vec/stellargraph-node2vec-node-classification.html) +- Node2Vec with weighted random walks. **View this demo**: [here](stellargraph-node2vec-weighted-random-walks.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/node2vec/stellargraph-node2vec-weighted-random-walks.html) +- Node classification with Node2Vec on Cora. **View this demo**: [here](stellargraph-node2vec-node-classification.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/node2vec/stellargraph-node2vec-node-classification.html) diff --git a/demos/node-classification/ppnp/README.md b/demos/node-classification/ppnp/README.md index a8af1b52a..5c825cf93 100644 --- a/demos/node-classification/ppnp/README.md +++ b/demos/node-classification/ppnp/README.md @@ -5,5 +5,5 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/node-classification/ppnp/ -- Stellargraph example: Personalised Propagation of Neural Predictions (PPNP) and Approximate PPNP (APPNP) on the CORA citation dataset. View: [here](ppnp-cora-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/ppnp/ppnp-cora-node-classification-example.html) +- Stellargraph example: Personalised Propagation of Neural Predictions (PPNP) and Approximate PPNP (APPNP) on the CORA citation dataset. **View this demo**: [here](ppnp-cora-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/ppnp/ppnp-cora-node-classification-example.html) diff --git a/scripts/demo_indexing.py b/scripts/demo_indexing.py index f42d9d182..db6739340 100644 --- a/scripts/demo_indexing.py +++ b/scripts/demo_indexing.py @@ -564,7 +564,7 @@ def demo_list(root): demo_html = demo.replace(".ipynb", ".html") url = os.path.join(DOC_URL_BASE, root, demo_html) - yield f"- {text}. View: [here]({demo}), [rendered]({url})" + yield f"- {text}. **View this demo**: [here]({demo}), [rendered]({url})" finally: os.chdir(repo_dir) From 2fe67b138b3f6bb00df020cc15f8197e081d184e Mon Sep 17 00:00:00 2001 From: Huon Wilson Date: Fri, 1 May 2020 14:58:44 +1000 Subject: [PATCH 05/43] Use a table instead --- demos/basics/README.md | 8 ++-- demos/calibration/README.md | 6 ++- demos/community_detection/README.md | 4 +- demos/connector/neo4j/README.md | 8 ++-- demos/embeddings/README.md | 22 +++++----- demos/ensembles/README.md | 6 ++- demos/graph-classification/README.md | 6 ++- demos/interpretability/README.md | 10 +++-- demos/link-prediction/README.md | 18 +++++---- demos/link-prediction/attri2vec/README.md | 4 +- demos/link-prediction/graphsage/README.md | 4 +- demos/link-prediction/hinsage/README.md | 4 +- demos/link-prediction/random-walks/README.md | 6 ++- demos/node-classification/README.md | 26 ++++++------ demos/node-classification/attri2vec/README.md | 4 +- demos/node-classification/gat/README.md | 4 +- demos/node-classification/gcn/README.md | 4 +- ...gcn-cora-node-classification-example.ipynb | 4 +- demos/node-classification/graphsage/README.md | 8 ++-- demos/node-classification/hinsage/README.md | 3 +- demos/node-classification/node2vec/README.md | 6 ++- demos/node-classification/ppnp/README.md | 4 +- scripts/demo_indexing.py | 40 ++++++++++++++----- 23 files changed, 134 insertions(+), 75 deletions(-) diff --git a/demos/basics/README.md b/demos/basics/README.md index 8aeab81fc..3576bd94d 100644 --- a/demos/basics/README.md +++ b/demos/basics/README.md @@ -5,7 +5,9 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/basics/ -- Loading data into StellarGraph from Pandas. **View this demo**: [here](loading-pandas.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/basics/loading-pandas.html) -- Loading data into StellarGraph from NetworkX. **View this demo**: [here](loading-networkx.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/basics/loading-networkx.html) -- Loading and saving data between StellarGraph and Neo4j. **View this demo**: [here](loading-saving-neo4j.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/basics/loading-saving-neo4j.html) +| Links | Demo | +|---|---| +| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/basics/loading-pandas.html);
[open here](loading-pandas.ipynb) | Loading data into StellarGraph from Pandas | +| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/basics/loading-networkx.html);
[open here](loading-networkx.ipynb) | Loading data into StellarGraph from NetworkX | +| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/basics/loading-saving-neo4j.html);
[open here](loading-saving-neo4j.ipynb) | Loading and saving data between StellarGraph and Neo4j | diff --git a/demos/calibration/README.md b/demos/calibration/README.md index 800fa01d6..d2f5eefd3 100644 --- a/demos/calibration/README.md +++ b/demos/calibration/README.md @@ -5,6 +5,8 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/calibration/ -- Node Attribute Inference (multi-class) using GraphSAGE and the Pubmed-Diabetes citation network with calibration. **View this demo**: [here](calibration-pubmed-node-classification.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/calibration/calibration-pubmed-node-classification.html) -- Link prediction example and calibration: GraphSAGE on the PubMed-Diabetes citation dataset. **View this demo**: [here](calibration-pubmed-link-prediction.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/calibration/calibration-pubmed-link-prediction.html) +| Links | Demo | +|---|---| +| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/calibration/calibration-pubmed-node-classification.html);
[open here](calibration-pubmed-node-classification.ipynb) | Node Attribute Inference (multi-class) using GraphSAGE and the Pubmed-Diabetes citation network with calibration | +| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/calibration/calibration-pubmed-link-prediction.html);
[open here](calibration-pubmed-link-prediction.ipynb) | Link prediction example and calibration: GraphSAGE on the PubMed-Diabetes citation dataset | diff --git a/demos/community_detection/README.md b/demos/community_detection/README.md index 60d817775..32551caea 100644 --- a/demos/community_detection/README.md +++ b/demos/community_detection/README.md @@ -5,5 +5,7 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/community_detection/ -- Comparison of clustering of node embeddings with a traditional community detection method. **View this demo**: [here](attacks_clustering_analysis.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/community_detection/attacks_clustering_analysis.html) +| Links | Demo | +|---|---| +| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/community_detection/attacks_clustering_analysis.html);
[open here](attacks_clustering_analysis.ipynb) | Comparison of clustering of node embeddings with a traditional community detection method | diff --git a/demos/connector/neo4j/README.md b/demos/connector/neo4j/README.md index dc1eec57a..8fd66033d 100644 --- a/demos/connector/neo4j/README.md +++ b/demos/connector/neo4j/README.md @@ -5,7 +5,9 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/connector/neo4j/ -- Notebook demo on loading Cora dataset into Neo4J Database. **View this demo**: [here](load-cora-into-neo4j.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/connector/neo4j/load-cora-into-neo4j.html) -- Stellargraph example: directed CORA citation network with directed GraphSAGE and Neo4J.. **View this demo**: [here](directed-graphsage-on-cora-neo4j-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/connector/neo4j/directed-graphsage-on-cora-neo4j-example.html) -- Undirected GraphSAGE on the CORA citation network using StellarGraph and Neo4j. **View this demo**: [here](undirected-graphsage-on-cora-neo4j-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/connector/neo4j/undirected-graphsage-on-cora-neo4j-example.html) +| Links | Demo | +|---|---| +| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/connector/neo4j/load-cora-into-neo4j.html);
[open here](load-cora-into-neo4j.ipynb) | Notebook demo on loading Cora dataset into Neo4J Database | +| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/connector/neo4j/directed-graphsage-on-cora-neo4j-example.html);
[open here](directed-graphsage-on-cora-neo4j-example.ipynb) | Stellargraph example: directed CORA citation network with directed GraphSAGE and Neo4J. | +| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/connector/neo4j/undirected-graphsage-on-cora-neo4j-example.html);
[open here](undirected-graphsage-on-cora-neo4j-example.ipynb) | Undirected GraphSAGE on the CORA citation network using StellarGraph and Neo4j | diff --git a/demos/embeddings/README.md b/demos/embeddings/README.md index 9ae1f7db4..ac5ffa40f 100644 --- a/demos/embeddings/README.md +++ b/demos/embeddings/README.md @@ -5,14 +5,16 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/embeddings/ -- Node Representation Learning with attri2vec on Citeseer. **View this demo**: [here](stellargraph-attri2vec-citeseer.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/stellargraph-attri2vec-citeseer.html) -- Graph representation learning through Unsupervised GraphSAGE. **View this demo**: [here](embeddings-unsupervised-graphsage-cora.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/embeddings-unsupervised-graphsage-cora.html) -- GraphWave aglorithm on a barbell graph. **View this demo**: [here](graphwave-barbell.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/graphwave-barbell.html) -- Node representation learning with Node2Vec on Cora. **View this demo**: [here](stellargraph-node2vec.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/stellargraph-node2vec.html) -- Node representation learning with Watch Your Step on Cora. **View this demo**: [here](watch-your-step-cora-demo.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/watch-your-step-cora-demo.html) -- GCN Deep Graph Infomax on MovieLens. **View this demo**: [here](deep-graph-infomax-blogcatalog3.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/deep-graph-infomax-blogcatalog3.html) -- GCN Deep Graph Infomax on MovieLens. **View this demo**: [here](deep-graph-infomax-aifb.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/deep-graph-infomax-aifb.html) -- Node representation learning with Metapath2Vec on BlogCatalog3. **View this demo**: [here](stellargraph-metapath2vec.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/stellargraph-metapath2vec.html) -- GCN Deep Graph Infomax on MovieLens. **View this demo**: [here](deep-graph-infomax-movielens.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/deep-graph-infomax-movielens.html) -- GCN Deep Graph Infomax on CORA. **View this demo**: [here](deep-graph-infomax-cora.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/deep-graph-infomax-cora.html) +| Links | Demo | +|---|---| +| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/stellargraph-attri2vec-citeseer.html);
[open here](stellargraph-attri2vec-citeseer.ipynb) | Node Representation Learning with attri2vec on Citeseer | +| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/embeddings-unsupervised-graphsage-cora.html);
[open here](embeddings-unsupervised-graphsage-cora.ipynb) | Graph representation learning through Unsupervised GraphSAGE | +| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/graphwave-barbell.html);
[open here](graphwave-barbell.ipynb) | GraphWave aglorithm on a barbell graph | +| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/stellargraph-node2vec.html);
[open here](stellargraph-node2vec.ipynb) | Node representation learning with Node2Vec on Cora | +| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/watch-your-step-cora-demo.html);
[open here](watch-your-step-cora-demo.ipynb) | Node representation learning with Watch Your Step on Cora | +| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/deep-graph-infomax-blogcatalog3.html);
[open here](deep-graph-infomax-blogcatalog3.ipynb) | GCN Deep Graph Infomax on MovieLens | +| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/deep-graph-infomax-aifb.html);
[open here](deep-graph-infomax-aifb.ipynb) | GCN Deep Graph Infomax on MovieLens | +| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/stellargraph-metapath2vec.html);
[open here](stellargraph-metapath2vec.ipynb) | Node representation learning with Metapath2Vec on BlogCatalog3 | +| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/deep-graph-infomax-movielens.html);
[open here](deep-graph-infomax-movielens.ipynb) | GCN Deep Graph Infomax on MovieLens | +| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/deep-graph-infomax-cora.html);
[open here](deep-graph-infomax-cora.ipynb) | GCN Deep Graph Infomax on CORA | diff --git a/demos/ensembles/README.md b/demos/ensembles/README.md index 1136bac2b..e34e5ce6f 100644 --- a/demos/ensembles/README.md +++ b/demos/ensembles/README.md @@ -5,6 +5,8 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/ensembles/ -- Stellargraph Ensembles for node attribute inference. **View this demo**: [here](ensemble-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/ensembles/ensemble-node-classification-example.html) -- StellarGraph Ensemble for link prediction. **View this demo**: [here](ensemble-link-prediction-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/ensembles/ensemble-link-prediction-example.html) +| Links | Demo | +|---|---| +| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/ensembles/ensemble-node-classification-example.html);
[open here](ensemble-node-classification-example.ipynb) | Stellargraph Ensembles for node attribute inference | +| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/ensembles/ensemble-link-prediction-example.html);
[open here](ensemble-link-prediction-example.ipynb) | StellarGraph Ensemble for link prediction | diff --git a/demos/graph-classification/README.md b/demos/graph-classification/README.md index bdfe4475b..c4ab3814a 100644 --- a/demos/graph-classification/README.md +++ b/demos/graph-classification/README.md @@ -5,6 +5,8 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/graph-classification/ -- Supervised graph classification example. **View this demo**: [here](supervised-graph-classification.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/graph-classification/supervised-graph-classification.html) -- Supervised graph classification with Deep Graph Convolutional Neural Networks. **View this demo**: [here](dgcnn-graph-classification.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/graph-classification/dgcnn-graph-classification.html) +| Links | Demo | +|---|---| +| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/graph-classification/supervised-graph-classification.html);
[open here](supervised-graph-classification.ipynb) | Supervised graph classification example | +| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/graph-classification/dgcnn-graph-classification.html);
[open here](dgcnn-graph-classification.ipynb) | Supervised graph classification with Deep Graph Convolutional Neural Networks | diff --git a/demos/interpretability/README.md b/demos/interpretability/README.md index 94adc5953..eaed27fad 100644 --- a/demos/interpretability/README.md +++ b/demos/interpretability/README.md @@ -5,8 +5,10 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/interpretability/ -- Interpreting Nodes and Edges by Saliency Maps in GAT. **View this demo**: [here](gat/node-link-importance-demo-gat.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/interpretability/gat/node-link-importance-demo-gat.html) -- Intepretability on Hateful Twitter Datasets. **View this demo**: [here](gcn/hateful-twitters-interpretability.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/interpretability/gcn/hateful-twitters-interpretability.html) -- Interpreting Nodes and Edges by Saliency Maps in GCN. **View this demo**: [here](gcn/node-link-importance-demo-gcn.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/interpretability/gcn/node-link-importance-demo-gcn.html) -- Interpreting Nodes and Edges by Saliency Maps in GCN (sparse). **View this demo**: [here](gcn/node-link-importance-demo-gcn-sparse.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/interpretability/gcn/node-link-importance-demo-gcn-sparse.html) +| Links | Demo | +|---|---| +| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/interpretability/gat/node-link-importance-demo-gat.html);
[open here](gat/node-link-importance-demo-gat.ipynb) | Interpreting Nodes and Edges by Saliency Maps in GAT | +| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/interpretability/gcn/hateful-twitters-interpretability.html);
[open here](gcn/hateful-twitters-interpretability.ipynb) | Intepretability on Hateful Twitter Datasets | +| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/interpretability/gcn/node-link-importance-demo-gcn.html);
[open here](gcn/node-link-importance-demo-gcn.ipynb) | Interpreting Nodes and Edges by Saliency Maps in GCN | +| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/interpretability/gcn/node-link-importance-demo-gcn-sparse.html);
[open here](gcn/node-link-importance-demo-gcn-sparse.ipynb) | Interpreting Nodes and Edges by Saliency Maps in GCN (sparse) | diff --git a/demos/link-prediction/README.md b/demos/link-prediction/README.md index 41491b389..2bbc83f4e 100644 --- a/demos/link-prediction/README.md +++ b/demos/link-prediction/README.md @@ -5,12 +5,14 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/ -- Link prediction example: GraphSAGE on the Cora citation dataset. **View this demo**: [here](graphsage/cora-links-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/graphsage/cora-links-example.html) -- Link prediction with Node2Vec on Cora. **View this demo**: [here](random-walks/cora-lp-demo.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/random-walks/cora-lp-demo.html) -- Continuous-Time Dynamic Network Embeddings. **View this demo**: [here](random-walks/ctdne-link-prediction.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/random-walks/ctdne-link-prediction.html) -- Inductive Node Representation Learning through attri2vec. **View this demo**: [here](attri2vec/stellargraph-attri2vec-DBLP.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/attri2vec/stellargraph-attri2vec-DBLP.html) -- Stellargraph example: Heterogeneous GraphSAGE on the Movielens recommendation dataset. **View this demo**: [here](hinsage/movielens-recommender.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/hinsage/movielens-recommender.html) -- ComplEx on WN18 and FB15K. **View this demo**: [here](knowledge-graphs/complex.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/knowledge-graphs/complex.html) -- DistMult on WN18 and FB15K. **View this demo**: [here](knowledge-graphs/distmult.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/knowledge-graphs/distmult.html) -- Link prediction example: GCN on the Cora citation dataset. **View this demo**: [here](gcn/cora-gcn-links-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/gcn/cora-gcn-links-example.html) +| Links | Demo | +|---|---| +| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/graphsage/cora-links-example.html);
[open here](graphsage/cora-links-example.ipynb) | Link prediction example: GraphSAGE on the Cora citation dataset | +| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/random-walks/cora-lp-demo.html);
[open here](random-walks/cora-lp-demo.ipynb) | Link prediction with Node2Vec on Cora | +| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/random-walks/ctdne-link-prediction.html);
[open here](random-walks/ctdne-link-prediction.ipynb) | Continuous-Time Dynamic Network Embeddings | +| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/attri2vec/stellargraph-attri2vec-DBLP.html);
[open here](attri2vec/stellargraph-attri2vec-DBLP.ipynb) | Inductive Node Representation Learning through attri2vec | +| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/hinsage/movielens-recommender.html);
[open here](hinsage/movielens-recommender.ipynb) | Stellargraph example: Heterogeneous GraphSAGE on the Movielens recommendation dataset | +| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/knowledge-graphs/complex.html);
[open here](knowledge-graphs/complex.ipynb) | ComplEx on WN18 and FB15K | +| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/knowledge-graphs/distmult.html);
[open here](knowledge-graphs/distmult.ipynb) | DistMult on WN18 and FB15K | +| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/gcn/cora-gcn-links-example.html);
[open here](gcn/cora-gcn-links-example.ipynb) | Link prediction example: GCN on the Cora citation dataset | diff --git a/demos/link-prediction/attri2vec/README.md b/demos/link-prediction/attri2vec/README.md index 8fdf32bc8..5cf11f69b 100644 --- a/demos/link-prediction/attri2vec/README.md +++ b/demos/link-prediction/attri2vec/README.md @@ -5,5 +5,7 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/attri2vec/ -- Inductive Node Representation Learning through attri2vec. **View this demo**: [here](stellargraph-attri2vec-DBLP.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/attri2vec/stellargraph-attri2vec-DBLP.html) +| Links | Demo | +|---|---| +| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/attri2vec/stellargraph-attri2vec-DBLP.html);
[open here](stellargraph-attri2vec-DBLP.ipynb) | Inductive Node Representation Learning through attri2vec | diff --git a/demos/link-prediction/graphsage/README.md b/demos/link-prediction/graphsage/README.md index 854f90951..72ff5b1da 100644 --- a/demos/link-prediction/graphsage/README.md +++ b/demos/link-prediction/graphsage/README.md @@ -5,5 +5,7 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/graphsage/ -- Link prediction example: GraphSAGE on the Cora citation dataset. **View this demo**: [here](cora-links-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/graphsage/cora-links-example.html) +| Links | Demo | +|---|---| +| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/graphsage/cora-links-example.html);
[open here](cora-links-example.ipynb) | Link prediction example: GraphSAGE on the Cora citation dataset | diff --git a/demos/link-prediction/hinsage/README.md b/demos/link-prediction/hinsage/README.md index 06991122a..ff0896338 100644 --- a/demos/link-prediction/hinsage/README.md +++ b/demos/link-prediction/hinsage/README.md @@ -5,5 +5,7 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/hinsage/ -- Stellargraph example: Heterogeneous GraphSAGE on the Movielens recommendation dataset. **View this demo**: [here](movielens-recommender.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/hinsage/movielens-recommender.html) +| Links | Demo | +|---|---| +| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/hinsage/movielens-recommender.html);
[open here](movielens-recommender.ipynb) | Stellargraph example: Heterogeneous GraphSAGE on the Movielens recommendation dataset | diff --git a/demos/link-prediction/random-walks/README.md b/demos/link-prediction/random-walks/README.md index b5edceed3..cb1fbe0f9 100644 --- a/demos/link-prediction/random-walks/README.md +++ b/demos/link-prediction/random-walks/README.md @@ -5,6 +5,8 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/random-walks/ -- Link prediction with Node2Vec on Cora. **View this demo**: [here](cora-lp-demo.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/random-walks/cora-lp-demo.html) -- Continuous-Time Dynamic Network Embeddings. **View this demo**: [here](ctdne-link-prediction.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/random-walks/ctdne-link-prediction.html) +| Links | Demo | +|---|---| +| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/random-walks/cora-lp-demo.html);
[open here](cora-lp-demo.ipynb) | Link prediction with Node2Vec on Cora | +| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/random-walks/ctdne-link-prediction.html);
[open here](ctdne-link-prediction.ipynb) | Continuous-Time Dynamic Network Embeddings | diff --git a/demos/node-classification/README.md b/demos/node-classification/README.md index 18bb0167a..d54077b67 100644 --- a/demos/node-classification/README.md +++ b/demos/node-classification/README.md @@ -5,16 +5,18 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/node-classification/ -- Stellargraph example: Graph Attention Network (GAT) on the CORA citation dataset. **View this demo**: [here](gat/gat-cora-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/gat/gat-cora-node-classification-example.html) -- Inductive representation learning using GraphSAGE on the Pubmed-Diabetes citation network . **View this demo**: [here](graphsage/graphsage-pubmed-inductive-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/graphsage-pubmed-inductive-node-classification-example.html) -- Stellargraph example: Fully directed GraphSAGE on a directed CORA citation network. **View this demo**: [here](graphsage/directed-graphsage-on-cora-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/directed-graphsage-on-cora-example.html) -- Stellargraph example: GraphSAGE on the CORA citation network. **View this demo**: [here](graphsage/graphsage-cora-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/graphsage-cora-node-classification-example.html) -- Stellargraph example: Personalised Propagation of Neural Predictions (PPNP) and Approximate PPNP (APPNP) on the CORA citation dataset. **View this demo**: [here](ppnp/ppnp-cora-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/ppnp/ppnp-cora-node-classification-example.html) -- Cluster-GCN for node classification. **View this demo**: [here](cluster-gcn/cluster-gcn-node-classification.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/cluster-gcn/cluster-gcn-node-classification.html) -- Node2Vec with weighted random walks. **View this demo**: [here](node2vec/stellargraph-node2vec-weighted-random-walks.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/node2vec/stellargraph-node2vec-weighted-random-walks.html) -- Node classification with Node2Vec on Cora. **View this demo**: [here](node2vec/stellargraph-node2vec-node-classification.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/node2vec/stellargraph-node2vec-node-classification.html) -- Stellargraph example: Simplified Graph Convolutions (SGC) on the CORA citation dataset. **View this demo**: [here](sgc/sgc-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/sgc/sgc-node-classification-example.html) -- Node Representation Learning with attri2vec on Citeseer. **View this demo**: [here](attri2vec/attri2vec-citeseer-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/attri2vec/attri2vec-citeseer-node-classification-example.html) -- Stellargraph example: Relational Graph Convolutional Network (RGCN) on the AIFB relational dataset. **View this demo**: [here](rgcn/rgcn-aifb-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/rgcn/rgcn-aifb-node-classification-example.html) -- Graph Convolutional Network (GCN) on the CORA citation dataset. **View this demo**: [here](gcn/gcn-cora-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/gcn/gcn-cora-node-classification-example.html) +| Links | Demo | +|---|---| +| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/gat/gat-cora-node-classification-example.html);
[open here](gat/gat-cora-node-classification-example.ipynb) | Stellargraph example: Graph Attention Network (GAT) on the CORA citation dataset | +| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/graphsage-pubmed-inductive-node-classification-example.html);
[open here](graphsage/graphsage-pubmed-inductive-node-classification-example.ipynb) | Inductive representation learning using GraphSAGE on the Pubmed-Diabetes citation network | +| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/directed-graphsage-on-cora-example.html);
[open here](graphsage/directed-graphsage-on-cora-example.ipynb) | Stellargraph example: Fully directed GraphSAGE on a directed CORA citation network | +| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/graphsage-cora-node-classification-example.html);
[open here](graphsage/graphsage-cora-node-classification-example.ipynb) | Stellargraph example: GraphSAGE on the CORA citation network | +| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/ppnp/ppnp-cora-node-classification-example.html);
[open here](ppnp/ppnp-cora-node-classification-example.ipynb) | Stellargraph example: Personalised Propagation of Neural Predictions (PPNP) and Approximate PPNP (APPNP) on the CORA citation dataset | +| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/cluster-gcn/cluster-gcn-node-classification.html);
[open here](cluster-gcn/cluster-gcn-node-classification.ipynb) | Cluster-GCN for node classification | +| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/node2vec/stellargraph-node2vec-weighted-random-walks.html);
[open here](node2vec/stellargraph-node2vec-weighted-random-walks.ipynb) | Node2Vec with weighted random walks | +| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/node2vec/stellargraph-node2vec-node-classification.html);
[open here](node2vec/stellargraph-node2vec-node-classification.ipynb) | Node classification with Node2Vec on Cora | +| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/sgc/sgc-node-classification-example.html);
[open here](sgc/sgc-node-classification-example.ipynb) | Stellargraph example: Simplified Graph Convolutions (SGC) on the CORA citation dataset | +| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/attri2vec/attri2vec-citeseer-node-classification-example.html);
[open here](attri2vec/attri2vec-citeseer-node-classification-example.ipynb) | Node Representation Learning with attri2vec on Citeseer | +| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/rgcn/rgcn-aifb-node-classification-example.html);
[open here](rgcn/rgcn-aifb-node-classification-example.ipynb) | Stellargraph example: Relational Graph Convolutional Network (RGCN) on the AIFB relational dataset | +| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/gcn/gcn-cora-node-classification-example.html);
[open here](gcn/gcn-cora-node-classification-example.ipynb) | Graph Convolutional Network (GCN) on the CORA citation dataset | diff --git a/demos/node-classification/attri2vec/README.md b/demos/node-classification/attri2vec/README.md index 1a46a3318..3041ee99e 100644 --- a/demos/node-classification/attri2vec/README.md +++ b/demos/node-classification/attri2vec/README.md @@ -5,5 +5,7 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/node-classification/attri2vec/ -- Node Representation Learning with attri2vec on Citeseer. **View this demo**: [here](attri2vec-citeseer-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/attri2vec/attri2vec-citeseer-node-classification-example.html) +| Links | Demo | +|---|---| +| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/attri2vec/attri2vec-citeseer-node-classification-example.html);
[open here](attri2vec-citeseer-node-classification-example.ipynb) | Node Representation Learning with attri2vec on Citeseer | diff --git a/demos/node-classification/gat/README.md b/demos/node-classification/gat/README.md index c63db9b76..f6c60847d 100644 --- a/demos/node-classification/gat/README.md +++ b/demos/node-classification/gat/README.md @@ -5,5 +5,7 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/node-classification/gat/ -- Stellargraph example: Graph Attention Network (GAT) on the CORA citation dataset. **View this demo**: [here](gat-cora-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/gat/gat-cora-node-classification-example.html) +| Links | Demo | +|---|---| +| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/gat/gat-cora-node-classification-example.html);
[open here](gat-cora-node-classification-example.ipynb) | Stellargraph example: Graph Attention Network (GAT) on the CORA citation dataset | diff --git a/demos/node-classification/gcn/README.md b/demos/node-classification/gcn/README.md index 5e37f53cc..9ff3af477 100644 --- a/demos/node-classification/gcn/README.md +++ b/demos/node-classification/gcn/README.md @@ -5,5 +5,7 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/node-classification/gcn/ -- Graph Convolutional Network (GCN) on the CORA citation dataset. **View this demo**: [here](gcn-cora-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/gcn/gcn-cora-node-classification-example.html) +| Links | Demo | +|---|---| +| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/gcn/gcn-cora-node-classification-example.html);
[open here](gcn-cora-node-classification-example.ipynb) | Graph Convolutional Network (GCN) on the CORA citation dataset | diff --git a/demos/node-classification/gcn/gcn-cora-node-classification-example.ipynb b/demos/node-classification/gcn/gcn-cora-node-classification-example.ipynb index 7d44a0539..829041140 100644 --- a/demos/node-classification/gcn/gcn-cora-node-classification-example.ipynb +++ b/demos/node-classification/gcn/gcn-cora-node-classification-example.ipynb @@ -1334,9 +1334,9 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "sg3", "language": "python", - "name": "python3" + "name": "sg3" }, "language_info": { "codemirror_mode": { diff --git a/demos/node-classification/graphsage/README.md b/demos/node-classification/graphsage/README.md index 3b5e801ee..9f2147c6c 100644 --- a/demos/node-classification/graphsage/README.md +++ b/demos/node-classification/graphsage/README.md @@ -5,7 +5,9 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/ -- Inductive representation learning using GraphSAGE on the Pubmed-Diabetes citation network . **View this demo**: [here](graphsage-pubmed-inductive-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/graphsage-pubmed-inductive-node-classification-example.html) -- Stellargraph example: Fully directed GraphSAGE on a directed CORA citation network. **View this demo**: [here](directed-graphsage-on-cora-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/directed-graphsage-on-cora-example.html) -- Stellargraph example: GraphSAGE on the CORA citation network. **View this demo**: [here](graphsage-cora-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/graphsage-cora-node-classification-example.html) +| Links | Demo | +|---|---| +| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/graphsage-pubmed-inductive-node-classification-example.html);
[open here](graphsage-pubmed-inductive-node-classification-example.ipynb) | Inductive representation learning using GraphSAGE on the Pubmed-Diabetes citation network | +| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/directed-graphsage-on-cora-example.html);
[open here](directed-graphsage-on-cora-example.ipynb) | Stellargraph example: Fully directed GraphSAGE on a directed CORA citation network | +| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/graphsage-cora-node-classification-example.html);
[open here](graphsage-cora-node-classification-example.ipynb) | Stellargraph example: GraphSAGE on the CORA citation network | diff --git a/demos/node-classification/hinsage/README.md b/demos/node-classification/hinsage/README.md index 4a51cb626..399457cd8 100644 --- a/demos/node-classification/hinsage/README.md +++ b/demos/node-classification/hinsage/README.md @@ -5,5 +5,6 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/node-classification/hinsage/ - +| Links | Demo | +|---|---| diff --git a/demos/node-classification/node2vec/README.md b/demos/node-classification/node2vec/README.md index 3b7171c79..e8919f56d 100644 --- a/demos/node-classification/node2vec/README.md +++ b/demos/node-classification/node2vec/README.md @@ -5,6 +5,8 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/node-classification/node2vec/ -- Node2Vec with weighted random walks. **View this demo**: [here](stellargraph-node2vec-weighted-random-walks.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/node2vec/stellargraph-node2vec-weighted-random-walks.html) -- Node classification with Node2Vec on Cora. **View this demo**: [here](stellargraph-node2vec-node-classification.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/node2vec/stellargraph-node2vec-node-classification.html) +| Links | Demo | +|---|---| +| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/node2vec/stellargraph-node2vec-weighted-random-walks.html);
[open here](stellargraph-node2vec-weighted-random-walks.ipynb) | Node2Vec with weighted random walks | +| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/node2vec/stellargraph-node2vec-node-classification.html);
[open here](stellargraph-node2vec-node-classification.ipynb) | Node classification with Node2Vec on Cora | diff --git a/demos/node-classification/ppnp/README.md b/demos/node-classification/ppnp/README.md index 5c825cf93..9b87a9b49 100644 --- a/demos/node-classification/ppnp/README.md +++ b/demos/node-classification/ppnp/README.md @@ -5,5 +5,7 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/node-classification/ppnp/ -- Stellargraph example: Personalised Propagation of Neural Predictions (PPNP) and Approximate PPNP (APPNP) on the CORA citation dataset. **View this demo**: [here](ppnp-cora-node-classification-example.ipynb), [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/ppnp/ppnp-cora-node-classification-example.html) +| Links | Demo | +|---|---| +| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/ppnp/ppnp-cora-node-classification-example.html);
[open here](ppnp-cora-node-classification-example.ipynb) | Stellargraph example: Personalised Propagation of Neural Predictions (PPNP) and Approximate PPNP (APPNP) on the CORA citation dataset | diff --git a/scripts/demo_indexing.py b/scripts/demo_indexing.py index db6739340..c8ee49bbd 100644 --- a/scripts/demo_indexing.py +++ b/scripts/demo_indexing.py @@ -34,9 +34,12 @@ TRUE_TEXT = "yes" # FIXME: this should point to stable, not latest DOC_URL_BASE = "https://stellargraph.readthedocs.io/en/latest" -AUTOGENERATED_PROMPT = f"autogenerated by {__file__}, edit that file instead of this location" +AUTOGENERATED_PROMPT = ( + f"autogenerated by {__file__}, edit that file instead of this location" +) DOCS_LINK_SEPARATOR = "\n\n" + class LinkKind(enum.Enum): index = 1 notebook = 2 @@ -277,6 +280,7 @@ def link_is_valid_relative(link, base_dir): return os.path.exists(os.path.join(base_dir, link)) + # Columns def index_link(*args, **kwargs): return T(*args, **kwargs, kind=LinkKind.index) @@ -516,6 +520,7 @@ def via_rl(link=None): Html("demos/README.md", "\n\n"), ] + def tables(action): compare = action == "compare" for file_fmt in FILES: @@ -542,16 +547,21 @@ def tables(action): edit_fixit=True, ) - separate_compare_overwrite(file_name, separator, action=action, new_middle=new_table, label="table") + separate_compare_overwrite( + file_name, separator, action=action, new_middle=new_table, label="table" + ) TITLE_RE = re.compile("^# (.*)") -def demo_list(root): + +def demo_listing_table(root): repo_dir = os.getcwd() os.chdir(root) try: + yield "| Links | Demo |" + yield "|---|---|" for demo in glob.iglob("**/*.ipynb", recursive=True): if ".ipynb_checkpoint" in demo: continue @@ -564,7 +574,9 @@ def demo_list(root): demo_html = demo.replace(".ipynb", ".html") url = os.path.join(DOC_URL_BASE, root, demo_html) - yield f"- {text}. **View this demo**: [here]({demo}), [rendered]({url})" + # this looks better if the two links are separated (hence ; and the explicit new line), + # and the "open here" doesn't get split across lines (hence non-breaking space) + yield f"| [rendered]({url});
[open here]({demo}) | {text} |" finally: os.chdir(repo_dir) @@ -581,12 +593,14 @@ def demo_indexing(action): index = os.path.join("docs", directory, "index.txt") if not os.path.exists(index): - error(f"expected each demo README to match a docs 'index.txt' file, found `{readme}` without corresponding `{index}`") + error( + f"expected each demo README to match a docs 'index.txt' file, found `{readme}` without corresponding `{index}`" + ) link = f"{DOC_URL_BASE}/{directory}" if directory != root_dir: - # the root readme already has the table in it - listing = "\n".join(demo_list(directory)) + # the root readme already has the detailed table in it + listing = "\n".join(demo_listing_table(directory)) else: listing = "" @@ -597,7 +611,13 @@ def demo_indexing(action): {listing}""" - separate_compare_overwrite(readme, DOCS_LINK_SEPARATOR, action=action, new_middle=new_contents, label="docs link") + separate_compare_overwrite( + readme, + DOCS_LINK_SEPARATOR, + action=action, + new_middle=new_contents, + label="docs link", + ) def separate_compare_overwrite(file_name, separator, action, new_middle, label): @@ -625,9 +645,7 @@ def separate_compare_overwrite(file_name, separator, action, new_middle, label): def error(message, edit_fixit=False): - formatted = ( - f"Error while generating information for documentation: {message}" - ) + formatted = f"Error while generating information for documentation: {message}" if edit_fixit: formatted += f"\n\nTo fix, edit `{__file__}` as appropriate and run it like `python {__file__} --action=overwrite` to overwrite existing information with updated form." From fc6a35b050b6dfda8cf30812cf96b5f3369db7b4 Mon Sep 17 00:00:00 2001 From: Huon Wilson Date: Fri, 1 May 2020 15:23:55 +1000 Subject: [PATCH 06/43] Undo spurious changes to notebooks --- .../gcn/gcn-cora-node-classification-example.ipynb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/demos/node-classification/gcn/gcn-cora-node-classification-example.ipynb b/demos/node-classification/gcn/gcn-cora-node-classification-example.ipynb index 829041140..7d44a0539 100644 --- a/demos/node-classification/gcn/gcn-cora-node-classification-example.ipynb +++ b/demos/node-classification/gcn/gcn-cora-node-classification-example.ipynb @@ -1334,9 +1334,9 @@ ], "metadata": { "kernelspec": { - "display_name": "sg3", + "display_name": "Python 3", "language": "python", - "name": "sg3" + "name": "python3" }, "language_info": { "codemirror_mode": { From 1db2d6bc56919ac5a7fd7cb0e7a0d78ee7c81ebb Mon Sep 17 00:00:00 2001 From: Huon Wilson Date: Fri, 1 May 2020 15:25:13 +1000 Subject: [PATCH 07/43] Update CI --- .buildkite/pipeline.yml | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index 42975bb7c..d41a07c5d 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -150,6 +150,18 @@ steps: agents: queue: "t2medium" + - label: ":book: check demo indexing" + command: "python scripts/demo_indexing.py --action=compare" + <<: *timeout + depends_on: "runner-3_6" + plugins: + <<: *plugins + docker-compose#v3.2.0: + <<: *compose-config + run: runner-3_6 + agents: + queue: "t2medium" + - label: ":shell: format" <<: *timeout plugins: @@ -209,15 +221,6 @@ steps: <<: *timeout command: "scripts/whitespace.sh --ci" - - label: ":book: check demo table" - command: "python scripts/demo_table.py --action=compare" - <<: *timeout - plugins: - <<: *plugins - docker#v3.5.0: - image: "python:3.6" - propagate_environment: true - - label: ":snake: conda build" <<: *timeout command: ".buildkite/steps/conda-build.sh" From 59dca12089ca16e502e1f90dac62fc097e9c18db Mon Sep 17 00:00:00 2001 From: Huon Wilson Date: Fri, 1 May 2020 15:32:18 +1000 Subject: [PATCH 08/43] Tweaks --- demos/node-classification/README.md | 2 +- demos/node-classification/graphsage/README.md | 2 +- scripts/demo_indexing.py | 1 - 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/demos/node-classification/README.md b/demos/node-classification/README.md index d54077b67..789fad020 100644 --- a/demos/node-classification/README.md +++ b/demos/node-classification/README.md @@ -8,7 +8,7 @@ These demos are displayed with detailed descriptions in the documentation: https | Links | Demo | |---|---| | [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/gat/gat-cora-node-classification-example.html);
[open here](gat/gat-cora-node-classification-example.ipynb) | Stellargraph example: Graph Attention Network (GAT) on the CORA citation dataset | -| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/graphsage-pubmed-inductive-node-classification-example.html);
[open here](graphsage/graphsage-pubmed-inductive-node-classification-example.ipynb) | Inductive representation learning using GraphSAGE on the Pubmed-Diabetes citation network | +| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/graphsage-pubmed-inductive-node-classification-example.html);
[open here](graphsage/graphsage-pubmed-inductive-node-classification-example.ipynb) | Inductive representation learning using GraphSAGE on the Pubmed-Diabetes citation network | | [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/directed-graphsage-on-cora-example.html);
[open here](graphsage/directed-graphsage-on-cora-example.ipynb) | Stellargraph example: Fully directed GraphSAGE on a directed CORA citation network | | [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/graphsage-cora-node-classification-example.html);
[open here](graphsage/graphsage-cora-node-classification-example.ipynb) | Stellargraph example: GraphSAGE on the CORA citation network | | [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/ppnp/ppnp-cora-node-classification-example.html);
[open here](ppnp/ppnp-cora-node-classification-example.ipynb) | Stellargraph example: Personalised Propagation of Neural Predictions (PPNP) and Approximate PPNP (APPNP) on the CORA citation dataset | diff --git a/demos/node-classification/graphsage/README.md b/demos/node-classification/graphsage/README.md index 9f2147c6c..e2cf42a03 100644 --- a/demos/node-classification/graphsage/README.md +++ b/demos/node-classification/graphsage/README.md @@ -7,7 +7,7 @@ These demos are displayed with detailed descriptions in the documentation: https | Links | Demo | |---|---| -| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/graphsage-pubmed-inductive-node-classification-example.html);
[open here](graphsage-pubmed-inductive-node-classification-example.ipynb) | Inductive representation learning using GraphSAGE on the Pubmed-Diabetes citation network | +| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/graphsage-pubmed-inductive-node-classification-example.html);
[open here](graphsage-pubmed-inductive-node-classification-example.ipynb) | Inductive representation learning using GraphSAGE on the Pubmed-Diabetes citation network | | [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/directed-graphsage-on-cora-example.html);
[open here](directed-graphsage-on-cora-example.ipynb) | Stellargraph example: Fully directed GraphSAGE on a directed CORA citation network | | [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/graphsage-cora-node-classification-example.html);
[open here](graphsage-cora-node-classification-example.ipynb) | Stellargraph example: GraphSAGE on the CORA citation network | diff --git a/scripts/demo_indexing.py b/scripts/demo_indexing.py index c8ee49bbd..fc842840f 100644 --- a/scripts/demo_indexing.py +++ b/scripts/demo_indexing.py @@ -16,7 +16,6 @@ import abc import argparse -import commonmark import contextlib import enum import glob From 04a348fbf8482cc031cb8e30fc6d420b8bde1487 Mon Sep 17 00:00:00 2001 From: Huon Wilson Date: Fri, 1 May 2020 16:11:00 +1000 Subject: [PATCH 09/43] Switch links --- demos/basics/README.md | 8 +++--- demos/calibration/README.md | 6 ++--- demos/community_detection/README.md | 4 +-- demos/connector/neo4j/README.md | 8 +++--- demos/embeddings/README.md | 22 ++++++++-------- demos/ensembles/README.md | 6 ++--- demos/graph-classification/README.md | 6 ++--- demos/interpretability/README.md | 10 +++---- demos/link-prediction/README.md | 18 ++++++------- demos/link-prediction/attri2vec/README.md | 4 +-- demos/link-prediction/graphsage/README.md | 4 +-- demos/link-prediction/hinsage/README.md | 4 +-- demos/link-prediction/random-walks/README.md | 6 ++--- demos/node-classification/README.md | 26 +++++++++---------- demos/node-classification/attri2vec/README.md | 4 +-- demos/node-classification/gat/README.md | 4 +-- demos/node-classification/gcn/README.md | 4 +-- demos/node-classification/graphsage/README.md | 8 +++--- demos/node-classification/hinsage/README.md | 2 +- demos/node-classification/node2vec/README.md | 6 ++--- demos/node-classification/ppnp/README.md | 4 +-- scripts/demo_indexing.py | 4 +-- 22 files changed, 84 insertions(+), 84 deletions(-) diff --git a/demos/basics/README.md b/demos/basics/README.md index 3576bd94d..e9cc9e48f 100644 --- a/demos/basics/README.md +++ b/demos/basics/README.md @@ -5,9 +5,9 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/basics/ -| Links | Demo | +| Demo (link to rendered) | Source | |---|---| -| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/basics/loading-pandas.html);
[open here](loading-pandas.ipynb) | Loading data into StellarGraph from Pandas | -| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/basics/loading-networkx.html);
[open here](loading-networkx.ipynb) | Loading data into StellarGraph from NetworkX | -| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/basics/loading-saving-neo4j.html);
[open here](loading-saving-neo4j.ipynb) | Loading and saving data between StellarGraph and Neo4j | +| [Loading data into StellarGraph from Pandas](https://stellargraph.readthedocs.io/en/latest/demos/basics/loading-pandas.html) | [source](loading-pandas.ipynb) | +| [Loading data into StellarGraph from NetworkX](https://stellargraph.readthedocs.io/en/latest/demos/basics/loading-networkx.html) | [source](loading-networkx.ipynb) | +| [Loading and saving data between StellarGraph and Neo4j](https://stellargraph.readthedocs.io/en/latest/demos/basics/loading-saving-neo4j.html) | [source](loading-saving-neo4j.ipynb) | diff --git a/demos/calibration/README.md b/demos/calibration/README.md index d2f5eefd3..7465b1c03 100644 --- a/demos/calibration/README.md +++ b/demos/calibration/README.md @@ -5,8 +5,8 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/calibration/ -| Links | Demo | +| Demo (link to rendered) | Source | |---|---| -| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/calibration/calibration-pubmed-node-classification.html);
[open here](calibration-pubmed-node-classification.ipynb) | Node Attribute Inference (multi-class) using GraphSAGE and the Pubmed-Diabetes citation network with calibration | -| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/calibration/calibration-pubmed-link-prediction.html);
[open here](calibration-pubmed-link-prediction.ipynb) | Link prediction example and calibration: GraphSAGE on the PubMed-Diabetes citation dataset | +| [Node Attribute Inference (multi-class) using GraphSAGE and the Pubmed-Diabetes citation network with calibration](https://stellargraph.readthedocs.io/en/latest/demos/calibration/calibration-pubmed-node-classification.html) | [source](calibration-pubmed-node-classification.ipynb) | +| [Link prediction example and calibration: GraphSAGE on the PubMed-Diabetes citation dataset](https://stellargraph.readthedocs.io/en/latest/demos/calibration/calibration-pubmed-link-prediction.html) | [source](calibration-pubmed-link-prediction.ipynb) | diff --git a/demos/community_detection/README.md b/demos/community_detection/README.md index 32551caea..4502f52ef 100644 --- a/demos/community_detection/README.md +++ b/demos/community_detection/README.md @@ -5,7 +5,7 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/community_detection/ -| Links | Demo | +| Demo (link to rendered) | Source | |---|---| -| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/community_detection/attacks_clustering_analysis.html);
[open here](attacks_clustering_analysis.ipynb) | Comparison of clustering of node embeddings with a traditional community detection method | +| [Comparison of clustering of node embeddings with a traditional community detection method](https://stellargraph.readthedocs.io/en/latest/demos/community_detection/attacks_clustering_analysis.html) | [source](attacks_clustering_analysis.ipynb) | diff --git a/demos/connector/neo4j/README.md b/demos/connector/neo4j/README.md index 8fd66033d..bc2dfd7cc 100644 --- a/demos/connector/neo4j/README.md +++ b/demos/connector/neo4j/README.md @@ -5,9 +5,9 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/connector/neo4j/ -| Links | Demo | +| Demo (link to rendered) | Source | |---|---| -| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/connector/neo4j/load-cora-into-neo4j.html);
[open here](load-cora-into-neo4j.ipynb) | Notebook demo on loading Cora dataset into Neo4J Database | -| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/connector/neo4j/directed-graphsage-on-cora-neo4j-example.html);
[open here](directed-graphsage-on-cora-neo4j-example.ipynb) | Stellargraph example: directed CORA citation network with directed GraphSAGE and Neo4J. | -| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/connector/neo4j/undirected-graphsage-on-cora-neo4j-example.html);
[open here](undirected-graphsage-on-cora-neo4j-example.ipynb) | Undirected GraphSAGE on the CORA citation network using StellarGraph and Neo4j | +| [Notebook demo on loading Cora dataset into Neo4J Database](https://stellargraph.readthedocs.io/en/latest/demos/connector/neo4j/load-cora-into-neo4j.html) | [source](load-cora-into-neo4j.ipynb) | +| [Stellargraph example: directed CORA citation network with directed GraphSAGE and Neo4J.](https://stellargraph.readthedocs.io/en/latest/demos/connector/neo4j/directed-graphsage-on-cora-neo4j-example.html) | [source](directed-graphsage-on-cora-neo4j-example.ipynb) | +| [Undirected GraphSAGE on the CORA citation network using StellarGraph and Neo4j](https://stellargraph.readthedocs.io/en/latest/demos/connector/neo4j/undirected-graphsage-on-cora-neo4j-example.html) | [source](undirected-graphsage-on-cora-neo4j-example.ipynb) | diff --git a/demos/embeddings/README.md b/demos/embeddings/README.md index ac5ffa40f..6ddcee670 100644 --- a/demos/embeddings/README.md +++ b/demos/embeddings/README.md @@ -5,16 +5,16 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/embeddings/ -| Links | Demo | +| Demo (link to rendered) | Source | |---|---| -| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/stellargraph-attri2vec-citeseer.html);
[open here](stellargraph-attri2vec-citeseer.ipynb) | Node Representation Learning with attri2vec on Citeseer | -| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/embeddings-unsupervised-graphsage-cora.html);
[open here](embeddings-unsupervised-graphsage-cora.ipynb) | Graph representation learning through Unsupervised GraphSAGE | -| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/graphwave-barbell.html);
[open here](graphwave-barbell.ipynb) | GraphWave aglorithm on a barbell graph | -| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/stellargraph-node2vec.html);
[open here](stellargraph-node2vec.ipynb) | Node representation learning with Node2Vec on Cora | -| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/watch-your-step-cora-demo.html);
[open here](watch-your-step-cora-demo.ipynb) | Node representation learning with Watch Your Step on Cora | -| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/deep-graph-infomax-blogcatalog3.html);
[open here](deep-graph-infomax-blogcatalog3.ipynb) | GCN Deep Graph Infomax on MovieLens | -| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/deep-graph-infomax-aifb.html);
[open here](deep-graph-infomax-aifb.ipynb) | GCN Deep Graph Infomax on MovieLens | -| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/stellargraph-metapath2vec.html);
[open here](stellargraph-metapath2vec.ipynb) | Node representation learning with Metapath2Vec on BlogCatalog3 | -| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/deep-graph-infomax-movielens.html);
[open here](deep-graph-infomax-movielens.ipynb) | GCN Deep Graph Infomax on MovieLens | -| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/deep-graph-infomax-cora.html);
[open here](deep-graph-infomax-cora.ipynb) | GCN Deep Graph Infomax on CORA | +| [Node Representation Learning with attri2vec on Citeseer](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/stellargraph-attri2vec-citeseer.html) | [source](stellargraph-attri2vec-citeseer.ipynb) | +| [Graph representation learning through Unsupervised GraphSAGE](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/embeddings-unsupervised-graphsage-cora.html) | [source](embeddings-unsupervised-graphsage-cora.ipynb) | +| [GraphWave aglorithm on a barbell graph](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/graphwave-barbell.html) | [source](graphwave-barbell.ipynb) | +| [Node representation learning with Node2Vec on Cora](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/stellargraph-node2vec.html) | [source](stellargraph-node2vec.ipynb) | +| [Node representation learning with Watch Your Step on Cora](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/watch-your-step-cora-demo.html) | [source](watch-your-step-cora-demo.ipynb) | +| [GCN Deep Graph Infomax on MovieLens](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/deep-graph-infomax-blogcatalog3.html) | [source](deep-graph-infomax-blogcatalog3.ipynb) | +| [GCN Deep Graph Infomax on MovieLens](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/deep-graph-infomax-aifb.html) | [source](deep-graph-infomax-aifb.ipynb) | +| [Node representation learning with Metapath2Vec on BlogCatalog3](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/stellargraph-metapath2vec.html) | [source](stellargraph-metapath2vec.ipynb) | +| [GCN Deep Graph Infomax on MovieLens](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/deep-graph-infomax-movielens.html) | [source](deep-graph-infomax-movielens.ipynb) | +| [GCN Deep Graph Infomax on CORA](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/deep-graph-infomax-cora.html) | [source](deep-graph-infomax-cora.ipynb) | diff --git a/demos/ensembles/README.md b/demos/ensembles/README.md index e34e5ce6f..031444a17 100644 --- a/demos/ensembles/README.md +++ b/demos/ensembles/README.md @@ -5,8 +5,8 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/ensembles/ -| Links | Demo | +| Demo (link to rendered) | Source | |---|---| -| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/ensembles/ensemble-node-classification-example.html);
[open here](ensemble-node-classification-example.ipynb) | Stellargraph Ensembles for node attribute inference | -| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/ensembles/ensemble-link-prediction-example.html);
[open here](ensemble-link-prediction-example.ipynb) | StellarGraph Ensemble for link prediction | +| [Stellargraph Ensembles for node attribute inference](https://stellargraph.readthedocs.io/en/latest/demos/ensembles/ensemble-node-classification-example.html) | [source](ensemble-node-classification-example.ipynb) | +| [StellarGraph Ensemble for link prediction](https://stellargraph.readthedocs.io/en/latest/demos/ensembles/ensemble-link-prediction-example.html) | [source](ensemble-link-prediction-example.ipynb) | diff --git a/demos/graph-classification/README.md b/demos/graph-classification/README.md index c4ab3814a..e7829f117 100644 --- a/demos/graph-classification/README.md +++ b/demos/graph-classification/README.md @@ -5,8 +5,8 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/graph-classification/ -| Links | Demo | +| Demo (link to rendered) | Source | |---|---| -| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/graph-classification/supervised-graph-classification.html);
[open here](supervised-graph-classification.ipynb) | Supervised graph classification example | -| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/graph-classification/dgcnn-graph-classification.html);
[open here](dgcnn-graph-classification.ipynb) | Supervised graph classification with Deep Graph Convolutional Neural Networks | +| [Supervised graph classification example](https://stellargraph.readthedocs.io/en/latest/demos/graph-classification/supervised-graph-classification.html) | [source](supervised-graph-classification.ipynb) | +| [Supervised graph classification with Deep Graph Convolutional Neural Networks](https://stellargraph.readthedocs.io/en/latest/demos/graph-classification/dgcnn-graph-classification.html) | [source](dgcnn-graph-classification.ipynb) | diff --git a/demos/interpretability/README.md b/demos/interpretability/README.md index eaed27fad..2bb8a4189 100644 --- a/demos/interpretability/README.md +++ b/demos/interpretability/README.md @@ -5,10 +5,10 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/interpretability/ -| Links | Demo | +| Demo (link to rendered) | Source | |---|---| -| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/interpretability/gat/node-link-importance-demo-gat.html);
[open here](gat/node-link-importance-demo-gat.ipynb) | Interpreting Nodes and Edges by Saliency Maps in GAT | -| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/interpretability/gcn/hateful-twitters-interpretability.html);
[open here](gcn/hateful-twitters-interpretability.ipynb) | Intepretability on Hateful Twitter Datasets | -| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/interpretability/gcn/node-link-importance-demo-gcn.html);
[open here](gcn/node-link-importance-demo-gcn.ipynb) | Interpreting Nodes and Edges by Saliency Maps in GCN | -| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/interpretability/gcn/node-link-importance-demo-gcn-sparse.html);
[open here](gcn/node-link-importance-demo-gcn-sparse.ipynb) | Interpreting Nodes and Edges by Saliency Maps in GCN (sparse) | +| [Interpreting Nodes and Edges by Saliency Maps in GAT](https://stellargraph.readthedocs.io/en/latest/demos/interpretability/gat/node-link-importance-demo-gat.html) | [source](gat/node-link-importance-demo-gat.ipynb) | +| [Intepretability on Hateful Twitter Datasets](https://stellargraph.readthedocs.io/en/latest/demos/interpretability/gcn/hateful-twitters-interpretability.html) | [source](gcn/hateful-twitters-interpretability.ipynb) | +| [Interpreting Nodes and Edges by Saliency Maps in GCN](https://stellargraph.readthedocs.io/en/latest/demos/interpretability/gcn/node-link-importance-demo-gcn.html) | [source](gcn/node-link-importance-demo-gcn.ipynb) | +| [Interpreting Nodes and Edges by Saliency Maps in GCN (sparse)](https://stellargraph.readthedocs.io/en/latest/demos/interpretability/gcn/node-link-importance-demo-gcn-sparse.html) | [source](gcn/node-link-importance-demo-gcn-sparse.ipynb) | diff --git a/demos/link-prediction/README.md b/demos/link-prediction/README.md index 2bbc83f4e..a03250fdb 100644 --- a/demos/link-prediction/README.md +++ b/demos/link-prediction/README.md @@ -5,14 +5,14 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/ -| Links | Demo | +| Demo (link to rendered) | Source | |---|---| -| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/graphsage/cora-links-example.html);
[open here](graphsage/cora-links-example.ipynb) | Link prediction example: GraphSAGE on the Cora citation dataset | -| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/random-walks/cora-lp-demo.html);
[open here](random-walks/cora-lp-demo.ipynb) | Link prediction with Node2Vec on Cora | -| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/random-walks/ctdne-link-prediction.html);
[open here](random-walks/ctdne-link-prediction.ipynb) | Continuous-Time Dynamic Network Embeddings | -| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/attri2vec/stellargraph-attri2vec-DBLP.html);
[open here](attri2vec/stellargraph-attri2vec-DBLP.ipynb) | Inductive Node Representation Learning through attri2vec | -| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/hinsage/movielens-recommender.html);
[open here](hinsage/movielens-recommender.ipynb) | Stellargraph example: Heterogeneous GraphSAGE on the Movielens recommendation dataset | -| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/knowledge-graphs/complex.html);
[open here](knowledge-graphs/complex.ipynb) | ComplEx on WN18 and FB15K | -| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/knowledge-graphs/distmult.html);
[open here](knowledge-graphs/distmult.ipynb) | DistMult on WN18 and FB15K | -| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/gcn/cora-gcn-links-example.html);
[open here](gcn/cora-gcn-links-example.ipynb) | Link prediction example: GCN on the Cora citation dataset | +| [Link prediction example: GraphSAGE on the Cora citation dataset](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/graphsage/cora-links-example.html) | [source](graphsage/cora-links-example.ipynb) | +| [Link prediction with Node2Vec on Cora](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/random-walks/cora-lp-demo.html) | [source](random-walks/cora-lp-demo.ipynb) | +| [Continuous-Time Dynamic Network Embeddings](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/random-walks/ctdne-link-prediction.html) | [source](random-walks/ctdne-link-prediction.ipynb) | +| [Inductive Node Representation Learning through attri2vec](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/attri2vec/stellargraph-attri2vec-DBLP.html) | [source](attri2vec/stellargraph-attri2vec-DBLP.ipynb) | +| [Stellargraph example: Heterogeneous GraphSAGE on the Movielens recommendation dataset](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/hinsage/movielens-recommender.html) | [source](hinsage/movielens-recommender.ipynb) | +| [ComplEx on WN18 and FB15K](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/knowledge-graphs/complex.html) | [source](knowledge-graphs/complex.ipynb) | +| [DistMult on WN18 and FB15K](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/knowledge-graphs/distmult.html) | [source](knowledge-graphs/distmult.ipynb) | +| [Link prediction example: GCN on the Cora citation dataset](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/gcn/cora-gcn-links-example.html) | [source](gcn/cora-gcn-links-example.ipynb) | diff --git a/demos/link-prediction/attri2vec/README.md b/demos/link-prediction/attri2vec/README.md index 5cf11f69b..448ca5289 100644 --- a/demos/link-prediction/attri2vec/README.md +++ b/demos/link-prediction/attri2vec/README.md @@ -5,7 +5,7 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/attri2vec/ -| Links | Demo | +| Demo (link to rendered) | Source | |---|---| -| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/attri2vec/stellargraph-attri2vec-DBLP.html);
[open here](stellargraph-attri2vec-DBLP.ipynb) | Inductive Node Representation Learning through attri2vec | +| [Inductive Node Representation Learning through attri2vec](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/attri2vec/stellargraph-attri2vec-DBLP.html) | [source](stellargraph-attri2vec-DBLP.ipynb) | diff --git a/demos/link-prediction/graphsage/README.md b/demos/link-prediction/graphsage/README.md index 72ff5b1da..f4788746b 100644 --- a/demos/link-prediction/graphsage/README.md +++ b/demos/link-prediction/graphsage/README.md @@ -5,7 +5,7 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/graphsage/ -| Links | Demo | +| Demo (link to rendered) | Source | |---|---| -| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/graphsage/cora-links-example.html);
[open here](cora-links-example.ipynb) | Link prediction example: GraphSAGE on the Cora citation dataset | +| [Link prediction example: GraphSAGE on the Cora citation dataset](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/graphsage/cora-links-example.html) | [source](cora-links-example.ipynb) | diff --git a/demos/link-prediction/hinsage/README.md b/demos/link-prediction/hinsage/README.md index ff0896338..1a21795d2 100644 --- a/demos/link-prediction/hinsage/README.md +++ b/demos/link-prediction/hinsage/README.md @@ -5,7 +5,7 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/hinsage/ -| Links | Demo | +| Demo (link to rendered) | Source | |---|---| -| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/hinsage/movielens-recommender.html);
[open here](movielens-recommender.ipynb) | Stellargraph example: Heterogeneous GraphSAGE on the Movielens recommendation dataset | +| [Stellargraph example: Heterogeneous GraphSAGE on the Movielens recommendation dataset](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/hinsage/movielens-recommender.html) | [source](movielens-recommender.ipynb) | diff --git a/demos/link-prediction/random-walks/README.md b/demos/link-prediction/random-walks/README.md index cb1fbe0f9..36b3987db 100644 --- a/demos/link-prediction/random-walks/README.md +++ b/demos/link-prediction/random-walks/README.md @@ -5,8 +5,8 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/random-walks/ -| Links | Demo | +| Demo (link to rendered) | Source | |---|---| -| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/random-walks/cora-lp-demo.html);
[open here](cora-lp-demo.ipynb) | Link prediction with Node2Vec on Cora | -| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/random-walks/ctdne-link-prediction.html);
[open here](ctdne-link-prediction.ipynb) | Continuous-Time Dynamic Network Embeddings | +| [Link prediction with Node2Vec on Cora](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/random-walks/cora-lp-demo.html) | [source](cora-lp-demo.ipynb) | +| [Continuous-Time Dynamic Network Embeddings](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/random-walks/ctdne-link-prediction.html) | [source](ctdne-link-prediction.ipynb) | diff --git a/demos/node-classification/README.md b/demos/node-classification/README.md index 789fad020..4fc3650f5 100644 --- a/demos/node-classification/README.md +++ b/demos/node-classification/README.md @@ -5,18 +5,18 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/node-classification/ -| Links | Demo | +| Demo (link to rendered) | Source | |---|---| -| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/gat/gat-cora-node-classification-example.html);
[open here](gat/gat-cora-node-classification-example.ipynb) | Stellargraph example: Graph Attention Network (GAT) on the CORA citation dataset | -| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/graphsage-pubmed-inductive-node-classification-example.html);
[open here](graphsage/graphsage-pubmed-inductive-node-classification-example.ipynb) | Inductive representation learning using GraphSAGE on the Pubmed-Diabetes citation network | -| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/directed-graphsage-on-cora-example.html);
[open here](graphsage/directed-graphsage-on-cora-example.ipynb) | Stellargraph example: Fully directed GraphSAGE on a directed CORA citation network | -| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/graphsage-cora-node-classification-example.html);
[open here](graphsage/graphsage-cora-node-classification-example.ipynb) | Stellargraph example: GraphSAGE on the CORA citation network | -| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/ppnp/ppnp-cora-node-classification-example.html);
[open here](ppnp/ppnp-cora-node-classification-example.ipynb) | Stellargraph example: Personalised Propagation of Neural Predictions (PPNP) and Approximate PPNP (APPNP) on the CORA citation dataset | -| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/cluster-gcn/cluster-gcn-node-classification.html);
[open here](cluster-gcn/cluster-gcn-node-classification.ipynb) | Cluster-GCN for node classification | -| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/node2vec/stellargraph-node2vec-weighted-random-walks.html);
[open here](node2vec/stellargraph-node2vec-weighted-random-walks.ipynb) | Node2Vec with weighted random walks | -| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/node2vec/stellargraph-node2vec-node-classification.html);
[open here](node2vec/stellargraph-node2vec-node-classification.ipynb) | Node classification with Node2Vec on Cora | -| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/sgc/sgc-node-classification-example.html);
[open here](sgc/sgc-node-classification-example.ipynb) | Stellargraph example: Simplified Graph Convolutions (SGC) on the CORA citation dataset | -| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/attri2vec/attri2vec-citeseer-node-classification-example.html);
[open here](attri2vec/attri2vec-citeseer-node-classification-example.ipynb) | Node Representation Learning with attri2vec on Citeseer | -| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/rgcn/rgcn-aifb-node-classification-example.html);
[open here](rgcn/rgcn-aifb-node-classification-example.ipynb) | Stellargraph example: Relational Graph Convolutional Network (RGCN) on the AIFB relational dataset | -| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/gcn/gcn-cora-node-classification-example.html);
[open here](gcn/gcn-cora-node-classification-example.ipynb) | Graph Convolutional Network (GCN) on the CORA citation dataset | +| [Stellargraph example: Graph Attention Network (GAT) on the CORA citation dataset](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/gat/gat-cora-node-classification-example.html) | [source](gat/gat-cora-node-classification-example.ipynb) | +| [Inductive representation learning using GraphSAGE on the Pubmed-Diabetes citation network ](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/graphsage-pubmed-inductive-node-classification-example.html) | [source](graphsage/graphsage-pubmed-inductive-node-classification-example.ipynb) | +| [Stellargraph example: Fully directed GraphSAGE on a directed CORA citation network](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/directed-graphsage-on-cora-example.html) | [source](graphsage/directed-graphsage-on-cora-example.ipynb) | +| [Stellargraph example: GraphSAGE on the CORA citation network](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/graphsage-cora-node-classification-example.html) | [source](graphsage/graphsage-cora-node-classification-example.ipynb) | +| [Stellargraph example: Personalised Propagation of Neural Predictions (PPNP) and Approximate PPNP (APPNP) on the CORA citation dataset](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/ppnp/ppnp-cora-node-classification-example.html) | [source](ppnp/ppnp-cora-node-classification-example.ipynb) | +| [Cluster-GCN for node classification](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/cluster-gcn/cluster-gcn-node-classification.html) | [source](cluster-gcn/cluster-gcn-node-classification.ipynb) | +| [Node2Vec with weighted random walks](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/node2vec/stellargraph-node2vec-weighted-random-walks.html) | [source](node2vec/stellargraph-node2vec-weighted-random-walks.ipynb) | +| [Node classification with Node2Vec on Cora](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/node2vec/stellargraph-node2vec-node-classification.html) | [source](node2vec/stellargraph-node2vec-node-classification.ipynb) | +| [Stellargraph example: Simplified Graph Convolutions (SGC) on the CORA citation dataset](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/sgc/sgc-node-classification-example.html) | [source](sgc/sgc-node-classification-example.ipynb) | +| [Node Representation Learning with attri2vec on Citeseer](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/attri2vec/attri2vec-citeseer-node-classification-example.html) | [source](attri2vec/attri2vec-citeseer-node-classification-example.ipynb) | +| [Stellargraph example: Relational Graph Convolutional Network (RGCN) on the AIFB relational dataset](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/rgcn/rgcn-aifb-node-classification-example.html) | [source](rgcn/rgcn-aifb-node-classification-example.ipynb) | +| [Graph Convolutional Network (GCN) on the CORA citation dataset](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/gcn/gcn-cora-node-classification-example.html) | [source](gcn/gcn-cora-node-classification-example.ipynb) | diff --git a/demos/node-classification/attri2vec/README.md b/demos/node-classification/attri2vec/README.md index 3041ee99e..8ba109068 100644 --- a/demos/node-classification/attri2vec/README.md +++ b/demos/node-classification/attri2vec/README.md @@ -5,7 +5,7 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/node-classification/attri2vec/ -| Links | Demo | +| Demo (link to rendered) | Source | |---|---| -| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/attri2vec/attri2vec-citeseer-node-classification-example.html);
[open here](attri2vec-citeseer-node-classification-example.ipynb) | Node Representation Learning with attri2vec on Citeseer | +| [Node Representation Learning with attri2vec on Citeseer](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/attri2vec/attri2vec-citeseer-node-classification-example.html) | [source](attri2vec-citeseer-node-classification-example.ipynb) | diff --git a/demos/node-classification/gat/README.md b/demos/node-classification/gat/README.md index f6c60847d..19eaca082 100644 --- a/demos/node-classification/gat/README.md +++ b/demos/node-classification/gat/README.md @@ -5,7 +5,7 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/node-classification/gat/ -| Links | Demo | +| Demo (link to rendered) | Source | |---|---| -| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/gat/gat-cora-node-classification-example.html);
[open here](gat-cora-node-classification-example.ipynb) | Stellargraph example: Graph Attention Network (GAT) on the CORA citation dataset | +| [Stellargraph example: Graph Attention Network (GAT) on the CORA citation dataset](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/gat/gat-cora-node-classification-example.html) | [source](gat-cora-node-classification-example.ipynb) | diff --git a/demos/node-classification/gcn/README.md b/demos/node-classification/gcn/README.md index 9ff3af477..cbc05ac8e 100644 --- a/demos/node-classification/gcn/README.md +++ b/demos/node-classification/gcn/README.md @@ -5,7 +5,7 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/node-classification/gcn/ -| Links | Demo | +| Demo (link to rendered) | Source | |---|---| -| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/gcn/gcn-cora-node-classification-example.html);
[open here](gcn-cora-node-classification-example.ipynb) | Graph Convolutional Network (GCN) on the CORA citation dataset | +| [Graph Convolutional Network (GCN) on the CORA citation dataset](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/gcn/gcn-cora-node-classification-example.html) | [source](gcn-cora-node-classification-example.ipynb) | diff --git a/demos/node-classification/graphsage/README.md b/demos/node-classification/graphsage/README.md index e2cf42a03..1f2c946f0 100644 --- a/demos/node-classification/graphsage/README.md +++ b/demos/node-classification/graphsage/README.md @@ -5,9 +5,9 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/ -| Links | Demo | +| Demo (link to rendered) | Source | |---|---| -| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/graphsage-pubmed-inductive-node-classification-example.html);
[open here](graphsage-pubmed-inductive-node-classification-example.ipynb) | Inductive representation learning using GraphSAGE on the Pubmed-Diabetes citation network | -| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/directed-graphsage-on-cora-example.html);
[open here](directed-graphsage-on-cora-example.ipynb) | Stellargraph example: Fully directed GraphSAGE on a directed CORA citation network | -| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/graphsage-cora-node-classification-example.html);
[open here](graphsage-cora-node-classification-example.ipynb) | Stellargraph example: GraphSAGE on the CORA citation network | +| [Inductive representation learning using GraphSAGE on the Pubmed-Diabetes citation network ](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/graphsage-pubmed-inductive-node-classification-example.html) | [source](graphsage-pubmed-inductive-node-classification-example.ipynb) | +| [Stellargraph example: Fully directed GraphSAGE on a directed CORA citation network](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/directed-graphsage-on-cora-example.html) | [source](directed-graphsage-on-cora-example.ipynb) | +| [Stellargraph example: GraphSAGE on the CORA citation network](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/graphsage-cora-node-classification-example.html) | [source](graphsage-cora-node-classification-example.ipynb) | diff --git a/demos/node-classification/hinsage/README.md b/demos/node-classification/hinsage/README.md index 399457cd8..2a72c202c 100644 --- a/demos/node-classification/hinsage/README.md +++ b/demos/node-classification/hinsage/README.md @@ -5,6 +5,6 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/node-classification/hinsage/ -| Links | Demo | +| Demo (link to rendered) | Source | |---|---| diff --git a/demos/node-classification/node2vec/README.md b/demos/node-classification/node2vec/README.md index e8919f56d..0290bd006 100644 --- a/demos/node-classification/node2vec/README.md +++ b/demos/node-classification/node2vec/README.md @@ -5,8 +5,8 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/node-classification/node2vec/ -| Links | Demo | +| Demo (link to rendered) | Source | |---|---| -| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/node2vec/stellargraph-node2vec-weighted-random-walks.html);
[open here](stellargraph-node2vec-weighted-random-walks.ipynb) | Node2Vec with weighted random walks | -| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/node2vec/stellargraph-node2vec-node-classification.html);
[open here](stellargraph-node2vec-node-classification.ipynb) | Node classification with Node2Vec on Cora | +| [Node2Vec with weighted random walks](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/node2vec/stellargraph-node2vec-weighted-random-walks.html) | [source](stellargraph-node2vec-weighted-random-walks.ipynb) | +| [Node classification with Node2Vec on Cora](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/node2vec/stellargraph-node2vec-node-classification.html) | [source](stellargraph-node2vec-node-classification.ipynb) | diff --git a/demos/node-classification/ppnp/README.md b/demos/node-classification/ppnp/README.md index 9b87a9b49..d516d09bb 100644 --- a/demos/node-classification/ppnp/README.md +++ b/demos/node-classification/ppnp/README.md @@ -5,7 +5,7 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/node-classification/ppnp/ -| Links | Demo | +| Demo (link to rendered) | Source | |---|---| -| [rendered](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/ppnp/ppnp-cora-node-classification-example.html);
[open here](ppnp-cora-node-classification-example.ipynb) | Stellargraph example: Personalised Propagation of Neural Predictions (PPNP) and Approximate PPNP (APPNP) on the CORA citation dataset | +| [Stellargraph example: Personalised Propagation of Neural Predictions (PPNP) and Approximate PPNP (APPNP) on the CORA citation dataset](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/ppnp/ppnp-cora-node-classification-example.html) | [source](ppnp-cora-node-classification-example.ipynb) | diff --git a/scripts/demo_indexing.py b/scripts/demo_indexing.py index fc842840f..261035494 100644 --- a/scripts/demo_indexing.py +++ b/scripts/demo_indexing.py @@ -559,7 +559,7 @@ def demo_listing_table(root): os.chdir(root) try: - yield "| Links | Demo |" + yield "| Demo (link to rendered) | Source |" yield "|---|---|" for demo in glob.iglob("**/*.ipynb", recursive=True): if ".ipynb_checkpoint" in demo: @@ -575,7 +575,7 @@ def demo_listing_table(root): # this looks better if the two links are separated (hence ; and the explicit new line), # and the "open here" doesn't get split across lines (hence non-breaking space) - yield f"| [rendered]({url});
[open here]({demo}) | {text} |" + yield f"| [{text}]({url}) | [source]({demo}) |" finally: os.chdir(repo_dir) From d9f96e93ba961e64d336a5daed5f2df494d417d1 Mon Sep 17 00:00:00 2001 From: Huon Wilson Date: Fri, 1 May 2020 16:13:17 +1000 Subject: [PATCH 10/43] Reword table heading --- demos/basics/README.md | 2 +- demos/calibration/README.md | 2 +- demos/community_detection/README.md | 2 +- demos/connector/neo4j/README.md | 2 +- demos/embeddings/README.md | 2 +- demos/ensembles/README.md | 2 +- demos/graph-classification/README.md | 2 +- demos/interpretability/README.md | 2 +- demos/link-prediction/README.md | 2 +- demos/link-prediction/attri2vec/README.md | 2 +- demos/link-prediction/graphsage/README.md | 2 +- demos/link-prediction/hinsage/README.md | 2 +- demos/link-prediction/random-walks/README.md | 2 +- demos/node-classification/README.md | 2 +- demos/node-classification/attri2vec/README.md | 2 +- demos/node-classification/gat/README.md | 2 +- demos/node-classification/gcn/README.md | 2 +- demos/node-classification/graphsage/README.md | 2 +- demos/node-classification/hinsage/README.md | 2 +- demos/node-classification/node2vec/README.md | 2 +- demos/node-classification/ppnp/README.md | 2 +- scripts/demo_indexing.py | 2 +- 22 files changed, 22 insertions(+), 22 deletions(-) diff --git a/demos/basics/README.md b/demos/basics/README.md index e9cc9e48f..5803903df 100644 --- a/demos/basics/README.md +++ b/demos/basics/README.md @@ -5,7 +5,7 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/basics/ -| Demo (link to rendered) | Source | +| Demo (link to documentation version) | Source | |---|---| | [Loading data into StellarGraph from Pandas](https://stellargraph.readthedocs.io/en/latest/demos/basics/loading-pandas.html) | [source](loading-pandas.ipynb) | | [Loading data into StellarGraph from NetworkX](https://stellargraph.readthedocs.io/en/latest/demos/basics/loading-networkx.html) | [source](loading-networkx.ipynb) | diff --git a/demos/calibration/README.md b/demos/calibration/README.md index 7465b1c03..ab3766a3e 100644 --- a/demos/calibration/README.md +++ b/demos/calibration/README.md @@ -5,7 +5,7 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/calibration/ -| Demo (link to rendered) | Source | +| Demo (link to documentation version) | Source | |---|---| | [Node Attribute Inference (multi-class) using GraphSAGE and the Pubmed-Diabetes citation network with calibration](https://stellargraph.readthedocs.io/en/latest/demos/calibration/calibration-pubmed-node-classification.html) | [source](calibration-pubmed-node-classification.ipynb) | | [Link prediction example and calibration: GraphSAGE on the PubMed-Diabetes citation dataset](https://stellargraph.readthedocs.io/en/latest/demos/calibration/calibration-pubmed-link-prediction.html) | [source](calibration-pubmed-link-prediction.ipynb) | diff --git a/demos/community_detection/README.md b/demos/community_detection/README.md index 4502f52ef..67a7a5002 100644 --- a/demos/community_detection/README.md +++ b/demos/community_detection/README.md @@ -5,7 +5,7 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/community_detection/ -| Demo (link to rendered) | Source | +| Demo (link to documentation version) | Source | |---|---| | [Comparison of clustering of node embeddings with a traditional community detection method](https://stellargraph.readthedocs.io/en/latest/demos/community_detection/attacks_clustering_analysis.html) | [source](attacks_clustering_analysis.ipynb) | diff --git a/demos/connector/neo4j/README.md b/demos/connector/neo4j/README.md index bc2dfd7cc..2988e6261 100644 --- a/demos/connector/neo4j/README.md +++ b/demos/connector/neo4j/README.md @@ -5,7 +5,7 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/connector/neo4j/ -| Demo (link to rendered) | Source | +| Demo (link to documentation version) | Source | |---|---| | [Notebook demo on loading Cora dataset into Neo4J Database](https://stellargraph.readthedocs.io/en/latest/demos/connector/neo4j/load-cora-into-neo4j.html) | [source](load-cora-into-neo4j.ipynb) | | [Stellargraph example: directed CORA citation network with directed GraphSAGE and Neo4J.](https://stellargraph.readthedocs.io/en/latest/demos/connector/neo4j/directed-graphsage-on-cora-neo4j-example.html) | [source](directed-graphsage-on-cora-neo4j-example.ipynb) | diff --git a/demos/embeddings/README.md b/demos/embeddings/README.md index 6ddcee670..51ecce216 100644 --- a/demos/embeddings/README.md +++ b/demos/embeddings/README.md @@ -5,7 +5,7 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/embeddings/ -| Demo (link to rendered) | Source | +| Demo (link to documentation version) | Source | |---|---| | [Node Representation Learning with attri2vec on Citeseer](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/stellargraph-attri2vec-citeseer.html) | [source](stellargraph-attri2vec-citeseer.ipynb) | | [Graph representation learning through Unsupervised GraphSAGE](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/embeddings-unsupervised-graphsage-cora.html) | [source](embeddings-unsupervised-graphsage-cora.ipynb) | diff --git a/demos/ensembles/README.md b/demos/ensembles/README.md index 031444a17..cd76b4492 100644 --- a/demos/ensembles/README.md +++ b/demos/ensembles/README.md @@ -5,7 +5,7 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/ensembles/ -| Demo (link to rendered) | Source | +| Demo (link to documentation version) | Source | |---|---| | [Stellargraph Ensembles for node attribute inference](https://stellargraph.readthedocs.io/en/latest/demos/ensembles/ensemble-node-classification-example.html) | [source](ensemble-node-classification-example.ipynb) | | [StellarGraph Ensemble for link prediction](https://stellargraph.readthedocs.io/en/latest/demos/ensembles/ensemble-link-prediction-example.html) | [source](ensemble-link-prediction-example.ipynb) | diff --git a/demos/graph-classification/README.md b/demos/graph-classification/README.md index e7829f117..28703ef9f 100644 --- a/demos/graph-classification/README.md +++ b/demos/graph-classification/README.md @@ -5,7 +5,7 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/graph-classification/ -| Demo (link to rendered) | Source | +| Demo (link to documentation version) | Source | |---|---| | [Supervised graph classification example](https://stellargraph.readthedocs.io/en/latest/demos/graph-classification/supervised-graph-classification.html) | [source](supervised-graph-classification.ipynb) | | [Supervised graph classification with Deep Graph Convolutional Neural Networks](https://stellargraph.readthedocs.io/en/latest/demos/graph-classification/dgcnn-graph-classification.html) | [source](dgcnn-graph-classification.ipynb) | diff --git a/demos/interpretability/README.md b/demos/interpretability/README.md index 2bb8a4189..7aad28016 100644 --- a/demos/interpretability/README.md +++ b/demos/interpretability/README.md @@ -5,7 +5,7 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/interpretability/ -| Demo (link to rendered) | Source | +| Demo (link to documentation version) | Source | |---|---| | [Interpreting Nodes and Edges by Saliency Maps in GAT](https://stellargraph.readthedocs.io/en/latest/demos/interpretability/gat/node-link-importance-demo-gat.html) | [source](gat/node-link-importance-demo-gat.ipynb) | | [Intepretability on Hateful Twitter Datasets](https://stellargraph.readthedocs.io/en/latest/demos/interpretability/gcn/hateful-twitters-interpretability.html) | [source](gcn/hateful-twitters-interpretability.ipynb) | diff --git a/demos/link-prediction/README.md b/demos/link-prediction/README.md index a03250fdb..7ba132d9e 100644 --- a/demos/link-prediction/README.md +++ b/demos/link-prediction/README.md @@ -5,7 +5,7 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/ -| Demo (link to rendered) | Source | +| Demo (link to documentation version) | Source | |---|---| | [Link prediction example: GraphSAGE on the Cora citation dataset](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/graphsage/cora-links-example.html) | [source](graphsage/cora-links-example.ipynb) | | [Link prediction with Node2Vec on Cora](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/random-walks/cora-lp-demo.html) | [source](random-walks/cora-lp-demo.ipynb) | diff --git a/demos/link-prediction/attri2vec/README.md b/demos/link-prediction/attri2vec/README.md index 448ca5289..50729b4cb 100644 --- a/demos/link-prediction/attri2vec/README.md +++ b/demos/link-prediction/attri2vec/README.md @@ -5,7 +5,7 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/attri2vec/ -| Demo (link to rendered) | Source | +| Demo (link to documentation version) | Source | |---|---| | [Inductive Node Representation Learning through attri2vec](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/attri2vec/stellargraph-attri2vec-DBLP.html) | [source](stellargraph-attri2vec-DBLP.ipynb) | diff --git a/demos/link-prediction/graphsage/README.md b/demos/link-prediction/graphsage/README.md index f4788746b..46fb69a26 100644 --- a/demos/link-prediction/graphsage/README.md +++ b/demos/link-prediction/graphsage/README.md @@ -5,7 +5,7 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/graphsage/ -| Demo (link to rendered) | Source | +| Demo (link to documentation version) | Source | |---|---| | [Link prediction example: GraphSAGE on the Cora citation dataset](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/graphsage/cora-links-example.html) | [source](cora-links-example.ipynb) | diff --git a/demos/link-prediction/hinsage/README.md b/demos/link-prediction/hinsage/README.md index 1a21795d2..dabfacaaf 100644 --- a/demos/link-prediction/hinsage/README.md +++ b/demos/link-prediction/hinsage/README.md @@ -5,7 +5,7 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/hinsage/ -| Demo (link to rendered) | Source | +| Demo (link to documentation version) | Source | |---|---| | [Stellargraph example: Heterogeneous GraphSAGE on the Movielens recommendation dataset](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/hinsage/movielens-recommender.html) | [source](movielens-recommender.ipynb) | diff --git a/demos/link-prediction/random-walks/README.md b/demos/link-prediction/random-walks/README.md index 36b3987db..0737505c4 100644 --- a/demos/link-prediction/random-walks/README.md +++ b/demos/link-prediction/random-walks/README.md @@ -5,7 +5,7 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/random-walks/ -| Demo (link to rendered) | Source | +| Demo (link to documentation version) | Source | |---|---| | [Link prediction with Node2Vec on Cora](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/random-walks/cora-lp-demo.html) | [source](cora-lp-demo.ipynb) | | [Continuous-Time Dynamic Network Embeddings](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/random-walks/ctdne-link-prediction.html) | [source](ctdne-link-prediction.ipynb) | diff --git a/demos/node-classification/README.md b/demos/node-classification/README.md index 4fc3650f5..b6a110db3 100644 --- a/demos/node-classification/README.md +++ b/demos/node-classification/README.md @@ -5,7 +5,7 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/node-classification/ -| Demo (link to rendered) | Source | +| Demo (link to documentation version) | Source | |---|---| | [Stellargraph example: Graph Attention Network (GAT) on the CORA citation dataset](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/gat/gat-cora-node-classification-example.html) | [source](gat/gat-cora-node-classification-example.ipynb) | | [Inductive representation learning using GraphSAGE on the Pubmed-Diabetes citation network ](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/graphsage-pubmed-inductive-node-classification-example.html) | [source](graphsage/graphsage-pubmed-inductive-node-classification-example.ipynb) | diff --git a/demos/node-classification/attri2vec/README.md b/demos/node-classification/attri2vec/README.md index 8ba109068..77d8d73f5 100644 --- a/demos/node-classification/attri2vec/README.md +++ b/demos/node-classification/attri2vec/README.md @@ -5,7 +5,7 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/node-classification/attri2vec/ -| Demo (link to rendered) | Source | +| Demo (link to documentation version) | Source | |---|---| | [Node Representation Learning with attri2vec on Citeseer](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/attri2vec/attri2vec-citeseer-node-classification-example.html) | [source](attri2vec-citeseer-node-classification-example.ipynb) | diff --git a/demos/node-classification/gat/README.md b/demos/node-classification/gat/README.md index 19eaca082..f20216383 100644 --- a/demos/node-classification/gat/README.md +++ b/demos/node-classification/gat/README.md @@ -5,7 +5,7 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/node-classification/gat/ -| Demo (link to rendered) | Source | +| Demo (link to documentation version) | Source | |---|---| | [Stellargraph example: Graph Attention Network (GAT) on the CORA citation dataset](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/gat/gat-cora-node-classification-example.html) | [source](gat-cora-node-classification-example.ipynb) | diff --git a/demos/node-classification/gcn/README.md b/demos/node-classification/gcn/README.md index cbc05ac8e..6475f9d98 100644 --- a/demos/node-classification/gcn/README.md +++ b/demos/node-classification/gcn/README.md @@ -5,7 +5,7 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/node-classification/gcn/ -| Demo (link to rendered) | Source | +| Demo (link to documentation version) | Source | |---|---| | [Graph Convolutional Network (GCN) on the CORA citation dataset](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/gcn/gcn-cora-node-classification-example.html) | [source](gcn-cora-node-classification-example.ipynb) | diff --git a/demos/node-classification/graphsage/README.md b/demos/node-classification/graphsage/README.md index 1f2c946f0..37f57b910 100644 --- a/demos/node-classification/graphsage/README.md +++ b/demos/node-classification/graphsage/README.md @@ -5,7 +5,7 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/ -| Demo (link to rendered) | Source | +| Demo (link to documentation version) | Source | |---|---| | [Inductive representation learning using GraphSAGE on the Pubmed-Diabetes citation network ](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/graphsage-pubmed-inductive-node-classification-example.html) | [source](graphsage-pubmed-inductive-node-classification-example.ipynb) | | [Stellargraph example: Fully directed GraphSAGE on a directed CORA citation network](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/directed-graphsage-on-cora-example.html) | [source](directed-graphsage-on-cora-example.ipynb) | diff --git a/demos/node-classification/hinsage/README.md b/demos/node-classification/hinsage/README.md index 2a72c202c..b08fbb9c0 100644 --- a/demos/node-classification/hinsage/README.md +++ b/demos/node-classification/hinsage/README.md @@ -5,6 +5,6 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/node-classification/hinsage/ -| Demo (link to rendered) | Source | +| Demo (link to documentation version) | Source | |---|---| diff --git a/demos/node-classification/node2vec/README.md b/demos/node-classification/node2vec/README.md index 0290bd006..7a2d8481f 100644 --- a/demos/node-classification/node2vec/README.md +++ b/demos/node-classification/node2vec/README.md @@ -5,7 +5,7 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/node-classification/node2vec/ -| Demo (link to rendered) | Source | +| Demo (link to documentation version) | Source | |---|---| | [Node2Vec with weighted random walks](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/node2vec/stellargraph-node2vec-weighted-random-walks.html) | [source](stellargraph-node2vec-weighted-random-walks.ipynb) | | [Node classification with Node2Vec on Cora](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/node2vec/stellargraph-node2vec-node-classification.html) | [source](stellargraph-node2vec-node-classification.ipynb) | diff --git a/demos/node-classification/ppnp/README.md b/demos/node-classification/ppnp/README.md index d516d09bb..58ace080c 100644 --- a/demos/node-classification/ppnp/README.md +++ b/demos/node-classification/ppnp/README.md @@ -5,7 +5,7 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/node-classification/ppnp/ -| Demo (link to rendered) | Source | +| Demo (link to documentation version) | Source | |---|---| | [Stellargraph example: Personalised Propagation of Neural Predictions (PPNP) and Approximate PPNP (APPNP) on the CORA citation dataset](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/ppnp/ppnp-cora-node-classification-example.html) | [source](ppnp-cora-node-classification-example.ipynb) | diff --git a/scripts/demo_indexing.py b/scripts/demo_indexing.py index 261035494..8a1446512 100644 --- a/scripts/demo_indexing.py +++ b/scripts/demo_indexing.py @@ -559,7 +559,7 @@ def demo_listing_table(root): os.chdir(root) try: - yield "| Demo (link to rendered) | Source |" + yield "| Demo (link to documentation version) | Source |" yield "|---|---|" for demo in glob.iglob("**/*.ipynb", recursive=True): if ".ipynb_checkpoint" in demo: From d4e1de68984fe372fd644ef3035b093c289c492d Mon Sep 17 00:00:00 2001 From: Huon Wilson Date: Sun, 3 May 2020 18:44:16 +1000 Subject: [PATCH 11/43] Include a diff --- scripts/demo_indexing.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/scripts/demo_indexing.py b/scripts/demo_indexing.py index 8a1446512..a20995cba 100644 --- a/scripts/demo_indexing.py +++ b/scripts/demo_indexing.py @@ -17,6 +17,7 @@ import abc import argparse import contextlib +import difflib import enum import glob import itertools @@ -582,7 +583,6 @@ def demo_listing_table(root): def demo_indexing(action): root_dir = "demos/" - compare = action == "compare" for directory in glob.iglob("demos/**/", recursive=True): readme = os.path.join(directory, "README.md") @@ -632,6 +632,15 @@ def separate_compare_overwrite(file_name, separator, action, new_middle, label): prefix, current_middle, suffix = parts if action == "compare" and new_middle != current_middle: + + diff = difflib.unified_diff( + current_middle.splitlines(keepends=True), + new_middle.splitlines(keepends=True), + fromfile=file_name, + tofile="autogenerated expected contents", + ) + sys.stdout.writelines(diff) + error( f"existing {label} in `{file_name}` differs to generated {label}; was it edited manually?", edit_fixit=True, From f562b10a9d1ad4d4ff10889c87a4e4016a48b7ff Mon Sep 17 00:00:00 2001 From: Huon Wilson Date: Sun, 3 May 2020 19:01:30 +1000 Subject: [PATCH 12/43] Point to Read the Docs, not Github, for demos --- README.md | 12 ++++++++---- stellargraph/mapper/full_batch_generators.py | 4 ++-- stellargraph/mapper/mini_batch_node_generators.py | 2 +- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index ff2c6ecdb..1deb84b2d 100644 --- a/README.md +++ b/README.md @@ -76,7 +76,9 @@ StellarGraph is built on [TensorFlow 2](https://tensorflow.org/) and its [Keras ## Getting Started -[The numerous detailed and narrated examples](https://github.com/stellargraph/stellargraph/tree/master/demos/) are a good way to get started with StellarGraph. There is likely to be one that is similar to your data or your problem (if not, [let us know](#getting-help)). +[The numerous detailed and narrated examples][demos] are a good way to get started with StellarGraph. There is likely to be one that is similar to your data or your problem (if not, [let us know](#getting-help)). + +[demos]: https://stellargraph.readthedocs.io/en/stable/demos/index.html You can start working with the examples immediately in Google Colab or Binder by clicking the ![](https://colab.research.google.com/assets/colab-badge.svg) and ![](https://mybinder.org/badge_logo.svg) badges within each Jupyter notebook. @@ -97,7 +99,7 @@ All dependencies required to run our demo notebooks locally can be installed usi If you get stuck or have a problem, there's many ways to make progress and get help or support: - [Read the documentation](https://stellargraph.readthedocs.io) -- [Consult the examples](https://github.com/stellargraph/stellargraph/tree/master/demos/) +- [Consult the examples][demos] - Contact us: - [Ask questions and discuss problems on the StellarGraph Discourse forum](https://community.stellargraph.io) - [File an issue](https://github.com/stellargraph/stellargraph/issues/new/choose) @@ -166,7 +168,9 @@ model.fit(generator.flow(train_targets.index, train_targets), epochs=5) print(f"Test set: loss = {loss}, accuracy = {accuracy}") ``` -This algorithm is spelled out in more detail in [its extended narrated notebook](https://github.com/stellargraph/stellargraph/tree/master/demos/node-classification/gcn/gcn-cora-node-classification-example.ipynb). We provide [many more algorithms, each with a detailed example](https://github.com/stellargraph/stellargraph/tree/master/demos/). +This algorithm is spelled out in more detail in [its extended narrated notebook][gcn-demo]. We provide [many more algorithms, each with a detailed example][demos]. + +[gcn-demo]: https://stellargraph.readthedocs.io/en/latest/demos/node-classification/gcn/gcn-cora-node-classification-example.html ## Algorithms The StellarGraph library currently includes the following algorithms for graph machine learning: @@ -207,7 +211,7 @@ To install StellarGraph library from [PyPI](https://pypi.org) using `pip`, execu pip install stellargraph ``` -Some of the examples in the `demos` [directory](https://github.com/stellargraph/stellargraph/tree/master/demos) require installing additional dependencies as well as `stellargraph`. To install these dependencies as well as StellarGraph using `pip` execute the following command: +[Some of the examples][demos] require installing additional dependencies as well as `stellargraph`. To install these dependencies as well as StellarGraph using `pip` execute the following command: ``` pip install stellargraph[demos] ``` diff --git a/stellargraph/mapper/full_batch_generators.py b/stellargraph/mapper/full_batch_generators.py index 931d76e4d..58b33a896 100644 --- a/stellargraph/mapper/full_batch_generators.py +++ b/stellargraph/mapper/full_batch_generators.py @@ -234,7 +234,7 @@ class FullBatchNodeGenerator(FullBatchGenerator): # Alternatively, use the generator itself with model.fit: model.fit(train_flow, epochs=num_epochs) - For more information, please see the GCN, GAT, PPNP/APPNP and SGC demos: ``_ + For more information, please see the :doc:`GCN, GAT, PPNP/APPNP and SGC demos `. Args: G (StellarGraphBase): a machine-learning StellarGraph-type graph @@ -320,7 +320,7 @@ class FullBatchLinkGenerator(FullBatchGenerator): # Alternatively, use the generator itself with model.fit: model.fit(train_flow, epochs=num_epochs) - For more information, please see the GCN, GAT, PPNP/APPNP and SGC demos: ``_ + For more information, please see the :doc:`GCN, GAT, PPNP/APPNP and SGC demos `. Args: G (StellarGraphBase): a machine-learning StellarGraph-type graph diff --git a/stellargraph/mapper/mini_batch_node_generators.py b/stellargraph/mapper/mini_batch_node_generators.py index 065f77e56..967596412 100644 --- a/stellargraph/mapper/mini_batch_node_generators.py +++ b/stellargraph/mapper/mini_batch_node_generators.py @@ -45,7 +45,7 @@ class ClusterNodeGenerator(Generator): [1] `W. Chiang, X. Liu, S. Si, Y. Li, S. Bengio, C. Hsieh, 2019 `_. - For more information, please see the ClusterGCN demo: ``_ + For more information, please see :doc:`the ClusterGCN demo `. Args: G (StellarGraph): a machine-learning StellarGraph-type graph From fc05c88513a3e755458e51c45a1b06188584e432 Mon Sep 17 00:00:00 2001 From: Huon Wilson Date: Mon, 4 May 2020 08:58:32 +1000 Subject: [PATCH 13/43] More links to RtD --- demos/community_detection/attacks_clustering_analysis.ipynb | 4 ++-- demos/embeddings/embeddings-unsupervised-graphsage-cora.ipynb | 4 ++-- demos/embeddings/stellargraph-node2vec.ipynb | 2 +- stellargraph/mapper/full_batch_generators.py | 4 ++-- stellargraph/mapper/mini_batch_node_generators.py | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/demos/community_detection/attacks_clustering_analysis.ipynb b/demos/community_detection/attacks_clustering_analysis.ipynb index ce5d5cedd..bf8387bc4 100644 --- a/demos/community_detection/attacks_clustering_analysis.ipynb +++ b/demos/community_detection/attacks_clustering_analysis.ipynb @@ -69,7 +69,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "For more detailed explanation of unsupervised graphSAGE see [Unsupervised graphSAGE demo](https://github.com/stellargraph/stellargraph/master/demos/embeddings/embeddings-unsupervised-graphsage-cora.ipynb)." + "For more detailed explanation of unsupervised graphSAGE see [Unsupervised graphSAGE demo](https://stellargraph.readthedocs.io/en/stable/demos/embeddings/embeddings-unsupervised-graphsage-cora.html)." ] }, { @@ -1338,7 +1338,7 @@ "source": [ "### Unsupervised graphSAGE\n", "\n", - "(For a detailed unsupervised GraphSAGE workflow with a narrative, see [Unsupervised graphSAGE demo](https://github.com/stellargraph/stellargraph/master/demos/embeddings/embeddings-unsupervised-graphsage-cora.ipynb))" + "(For a detailed unsupervised GraphSAGE workflow with a narrative, see [Unsupervised graphSAGE demo](https://stellargraph.readthedocs.io/en/stable/demos/embeddings/embeddings-unsupervised-graphsage-cora.html))" ] }, { diff --git a/demos/embeddings/embeddings-unsupervised-graphsage-cora.ipynb b/demos/embeddings/embeddings-unsupervised-graphsage-cora.ipynb index fce875ca7..17ac8a08e 100644 --- a/demos/embeddings/embeddings-unsupervised-graphsage-cora.ipynb +++ b/demos/embeddings/embeddings-unsupervised-graphsage-cora.ipynb @@ -31,7 +31,7 @@ "\n", "A high-level explanation of the unsupervised GraphSAGE method of graph representation learning is as follows.\n", "\n", - "Objective: *Given a graph, learn embeddings of the nodes using only the graph structure and the node features, without using any known node class labels* (hence \"unsupervised\"; for semi-supervised learning of node embeddings, see this [demo](https://github.com/stellargraph/stellargraph/tree/master/demos/node-classification/graphsage/graphsage-cora-node-classification-example.ipynb))\n", + "Objective: *Given a graph, learn embeddings of the nodes using only the graph structure and the node features, without using any known node class labels* (hence \"unsupervised\"; for semi-supervised learning of node embeddings, see this [demo](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/graphsage/graphsage-cora-node-classification-example.html))\n", "\n", "**Unsupervised GraphSAGE model:** In the Unsupervised GraphSAGE model, node embeddings are learnt by solving a simple classification task: given a large set of \"positive\" `(target, context)` node pairs generated from random walks performed on the graph (i.e., node pairs that co-occur within a certain context window in random walks), and an equally large set of \"negative\" node pairs that are randomly selected from the graph according to a certain distribution, learn a binary classifier that predicts whether arbitrary node pairs are likely to co-occur in a random walk performed on the graph. Through learning this simple binary node-pair-classification task, the model automatically learns an inductive mapping from attributes of nodes and their neighbors to node embeddings in a high-dimensional vector space, which preserves structural and feature similarities of the nodes. Unlike embeddings obtained by algorithms such as [Node2Vec](https://snap.stanford.edu/node2vec), this mapping is inductive: given a new node (with attributes) and its links to other nodes in the graph (which was unseen during model training), we can evaluate its embeddings without having to re-train the model. \n", "\n", @@ -681,7 +681,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "The obtained accuracy is pretty decent, better than that obtained by using node embeddings obtained by `node2vec` that ignores node attributes, only taking into account the graph structure (see this [demo](https://github.com/stellargraph/stellargraph/tree/master/demos/embeddings/stellargraph-node2vec.ipynb)). " + "The obtained accuracy is pretty decent, better than that obtained by using node embeddings obtained by `node2vec` that ignores node attributes, only taking into account the graph structure (see this [demo](https://stellargraph.readthedocs.io/en/stable/demos/embeddings/stellargraph-node2vec.html)). " ] }, { diff --git a/demos/embeddings/stellargraph-node2vec.ipynb b/demos/embeddings/stellargraph-node2vec.ipynb index 04c5cf09d..7c26fb612 100644 --- a/demos/embeddings/stellargraph-node2vec.ipynb +++ b/demos/embeddings/stellargraph-node2vec.ipynb @@ -333,7 +333,7 @@ "\n", "The node embeddings calculated using Word2Vec can be used as feature vectors in a downstream task such as node attribute inference (e.g., inferring the subject of a paper in Cora), community detection (clustering of nodes based on the similarity of their embedding vectors), and link prediction (e.g., prediction of citation links between papers).\n", "\n", - "For a more detailed example of using Node2Vec for link prediction see [this example](https://github.com/stellargraph/stellargraph/tree/master/demos/link-prediction/random-walks/cora-lp-demo.ipynb)." + "For a more detailed example of using Node2Vec for link prediction see [this example](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/random-walks/cora-lp-demo.html)." ] }, { diff --git a/stellargraph/mapper/full_batch_generators.py b/stellargraph/mapper/full_batch_generators.py index 58b33a896..a40c8e4b1 100644 --- a/stellargraph/mapper/full_batch_generators.py +++ b/stellargraph/mapper/full_batch_generators.py @@ -234,7 +234,7 @@ class FullBatchNodeGenerator(FullBatchGenerator): # Alternatively, use the generator itself with model.fit: model.fit(train_flow, epochs=num_epochs) - For more information, please see the :doc:`GCN, GAT, PPNP/APPNP and SGC demos `. + For more information, please see the `GCN, GAT, PPNP/APPNP and SGC demos `_. Args: G (StellarGraphBase): a machine-learning StellarGraph-type graph @@ -320,7 +320,7 @@ class FullBatchLinkGenerator(FullBatchGenerator): # Alternatively, use the generator itself with model.fit: model.fit(train_flow, epochs=num_epochs) - For more information, please see the :doc:`GCN, GAT, PPNP/APPNP and SGC demos `. + For more information, please see the `GCN, GAT, PPNP/APPNP and SGC demos `_. Args: G (StellarGraphBase): a machine-learning StellarGraph-type graph diff --git a/stellargraph/mapper/mini_batch_node_generators.py b/stellargraph/mapper/mini_batch_node_generators.py index 967596412..c2f1a9241 100644 --- a/stellargraph/mapper/mini_batch_node_generators.py +++ b/stellargraph/mapper/mini_batch_node_generators.py @@ -45,7 +45,7 @@ class ClusterNodeGenerator(Generator): [1] `W. Chiang, X. Liu, S. Si, Y. Li, S. Bengio, C. Hsieh, 2019 `_. - For more information, please see :doc:`the ClusterGCN demo `. + For more information, please see `the ClusterGCN demo `_. Args: G (StellarGraph): a machine-learning StellarGraph-type graph From ecbfaf4874e52bef3744af64bbfe57df1b15dc73 Mon Sep 17 00:00:00 2001 From: Huon Wilson Date: Mon, 4 May 2020 09:32:42 +1000 Subject: [PATCH 14/43] Sort and add description --- demos/README.md | 2 ++ demos/basics/README.md | 6 ++++-- demos/calibration/README.md | 6 ++++-- demos/community_detection/README.md | 4 +++- demos/connector/neo4j/README.md | 6 ++++-- demos/embeddings/README.md | 16 +++++++++------- demos/ensembles/README.md | 6 ++++-- demos/graph-classification/README.md | 6 ++++-- demos/interpretability/README.md | 6 ++++-- demos/link-prediction/README.md | 12 +++++++----- demos/link-prediction/attri2vec/README.md | 4 +++- demos/link-prediction/graphsage/README.md | 4 +++- demos/link-prediction/hinsage/README.md | 4 +++- demos/link-prediction/random-walks/README.md | 4 +++- demos/node-classification/README.md | 18 ++++++++++-------- demos/node-classification/attri2vec/README.md | 4 +++- demos/node-classification/gat/README.md | 4 +++- demos/node-classification/gcn/README.md | 4 +++- demos/node-classification/graphsage/README.md | 6 ++++-- demos/node-classification/hinsage/README.md | 4 +++- demos/node-classification/node2vec/README.md | 6 ++++-- demos/node-classification/ppnp/README.md | 4 +++- scripts/demo_indexing.py | 15 +++++++++++---- 23 files changed, 101 insertions(+), 50 deletions(-) diff --git a/demos/README.md b/demos/README.md index a8fa5ad42..c9db0820e 100644 --- a/demos/README.md +++ b/demos/README.md @@ -6,6 +6,8 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/ + + diff --git a/demos/basics/README.md b/demos/basics/README.md index 5803903df..529d13f9b 100644 --- a/demos/basics/README.md +++ b/demos/basics/README.md @@ -5,9 +5,11 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/basics/ -| Demo (link to documentation version) | Source | +| Demo | Source | |---|---| -| [Loading data into StellarGraph from Pandas](https://stellargraph.readthedocs.io/en/latest/demos/basics/loading-pandas.html) | [source](loading-pandas.ipynb) | | [Loading data into StellarGraph from NetworkX](https://stellargraph.readthedocs.io/en/latest/demos/basics/loading-networkx.html) | [source](loading-networkx.ipynb) | +| [Loading data into StellarGraph from Pandas](https://stellargraph.readthedocs.io/en/latest/demos/basics/loading-pandas.html) | [source](loading-pandas.ipynb) | | [Loading and saving data between StellarGraph and Neo4j](https://stellargraph.readthedocs.io/en/latest/demos/basics/loading-saving-neo4j.html) | [source](loading-saving-neo4j.ipynb) | + +The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). diff --git a/demos/calibration/README.md b/demos/calibration/README.md index ab3766a3e..8716b645b 100644 --- a/demos/calibration/README.md +++ b/demos/calibration/README.md @@ -5,8 +5,10 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/calibration/ -| Demo (link to documentation version) | Source | +| Demo | Source | |---|---| -| [Node Attribute Inference (multi-class) using GraphSAGE and the Pubmed-Diabetes citation network with calibration](https://stellargraph.readthedocs.io/en/latest/demos/calibration/calibration-pubmed-node-classification.html) | [source](calibration-pubmed-node-classification.ipynb) | | [Link prediction example and calibration: GraphSAGE on the PubMed-Diabetes citation dataset](https://stellargraph.readthedocs.io/en/latest/demos/calibration/calibration-pubmed-link-prediction.html) | [source](calibration-pubmed-link-prediction.ipynb) | +| [Node Attribute Inference (multi-class) using GraphSAGE and the Pubmed-Diabetes citation network with calibration](https://stellargraph.readthedocs.io/en/latest/demos/calibration/calibration-pubmed-node-classification.html) | [source](calibration-pubmed-node-classification.ipynb) | + +The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). diff --git a/demos/community_detection/README.md b/demos/community_detection/README.md index 67a7a5002..9edf0c33e 100644 --- a/demos/community_detection/README.md +++ b/demos/community_detection/README.md @@ -5,7 +5,9 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/community_detection/ -| Demo (link to documentation version) | Source | +| Demo | Source | |---|---| | [Comparison of clustering of node embeddings with a traditional community detection method](https://stellargraph.readthedocs.io/en/latest/demos/community_detection/attacks_clustering_analysis.html) | [source](attacks_clustering_analysis.ipynb) | + +The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). diff --git a/demos/connector/neo4j/README.md b/demos/connector/neo4j/README.md index 2988e6261..a5555024a 100644 --- a/demos/connector/neo4j/README.md +++ b/demos/connector/neo4j/README.md @@ -5,9 +5,11 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/connector/neo4j/ -| Demo (link to documentation version) | Source | +| Demo | Source | |---|---| -| [Notebook demo on loading Cora dataset into Neo4J Database](https://stellargraph.readthedocs.io/en/latest/demos/connector/neo4j/load-cora-into-neo4j.html) | [source](load-cora-into-neo4j.ipynb) | | [Stellargraph example: directed CORA citation network with directed GraphSAGE and Neo4J.](https://stellargraph.readthedocs.io/en/latest/demos/connector/neo4j/directed-graphsage-on-cora-neo4j-example.html) | [source](directed-graphsage-on-cora-neo4j-example.ipynb) | +| [Notebook demo on loading Cora dataset into Neo4J Database](https://stellargraph.readthedocs.io/en/latest/demos/connector/neo4j/load-cora-into-neo4j.html) | [source](load-cora-into-neo4j.ipynb) | | [Undirected GraphSAGE on the CORA citation network using StellarGraph and Neo4j](https://stellargraph.readthedocs.io/en/latest/demos/connector/neo4j/undirected-graphsage-on-cora-neo4j-example.html) | [source](undirected-graphsage-on-cora-neo4j-example.ipynb) | + +The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). diff --git a/demos/embeddings/README.md b/demos/embeddings/README.md index 51ecce216..053a5281d 100644 --- a/demos/embeddings/README.md +++ b/demos/embeddings/README.md @@ -5,16 +5,18 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/embeddings/ -| Demo (link to documentation version) | Source | +| Demo | Source | |---|---| -| [Node Representation Learning with attri2vec on Citeseer](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/stellargraph-attri2vec-citeseer.html) | [source](stellargraph-attri2vec-citeseer.ipynb) | +| [GCN Deep Graph Infomax on MovieLens](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/deep-graph-infomax-aifb.html) | [source](deep-graph-infomax-aifb.ipynb) | +| [GCN Deep Graph Infomax on MovieLens](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/deep-graph-infomax-blogcatalog3.html) | [source](deep-graph-infomax-blogcatalog3.ipynb) | +| [GCN Deep Graph Infomax on CORA](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/deep-graph-infomax-cora.html) | [source](deep-graph-infomax-cora.ipynb) | +| [GCN Deep Graph Infomax on MovieLens](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/deep-graph-infomax-movielens.html) | [source](deep-graph-infomax-movielens.ipynb) | | [Graph representation learning through Unsupervised GraphSAGE](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/embeddings-unsupervised-graphsage-cora.html) | [source](embeddings-unsupervised-graphsage-cora.ipynb) | | [GraphWave aglorithm on a barbell graph](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/graphwave-barbell.html) | [source](graphwave-barbell.ipynb) | +| [Node Representation Learning with attri2vec on Citeseer](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/stellargraph-attri2vec-citeseer.html) | [source](stellargraph-attri2vec-citeseer.ipynb) | +| [Node representation learning with Metapath2Vec on BlogCatalog3](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/stellargraph-metapath2vec.html) | [source](stellargraph-metapath2vec.ipynb) | | [Node representation learning with Node2Vec on Cora](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/stellargraph-node2vec.html) | [source](stellargraph-node2vec.ipynb) | | [Node representation learning with Watch Your Step on Cora](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/watch-your-step-cora-demo.html) | [source](watch-your-step-cora-demo.ipynb) | -| [GCN Deep Graph Infomax on MovieLens](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/deep-graph-infomax-blogcatalog3.html) | [source](deep-graph-infomax-blogcatalog3.ipynb) | -| [GCN Deep Graph Infomax on MovieLens](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/deep-graph-infomax-aifb.html) | [source](deep-graph-infomax-aifb.ipynb) | -| [Node representation learning with Metapath2Vec on BlogCatalog3](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/stellargraph-metapath2vec.html) | [source](stellargraph-metapath2vec.ipynb) | -| [GCN Deep Graph Infomax on MovieLens](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/deep-graph-infomax-movielens.html) | [source](deep-graph-infomax-movielens.ipynb) | -| [GCN Deep Graph Infomax on CORA](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/deep-graph-infomax-cora.html) | [source](deep-graph-infomax-cora.ipynb) | + +The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). diff --git a/demos/ensembles/README.md b/demos/ensembles/README.md index cd76b4492..7cbf525da 100644 --- a/demos/ensembles/README.md +++ b/demos/ensembles/README.md @@ -5,8 +5,10 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/ensembles/ -| Demo (link to documentation version) | Source | +| Demo | Source | |---|---| -| [Stellargraph Ensembles for node attribute inference](https://stellargraph.readthedocs.io/en/latest/demos/ensembles/ensemble-node-classification-example.html) | [source](ensemble-node-classification-example.ipynb) | | [StellarGraph Ensemble for link prediction](https://stellargraph.readthedocs.io/en/latest/demos/ensembles/ensemble-link-prediction-example.html) | [source](ensemble-link-prediction-example.ipynb) | +| [Stellargraph Ensembles for node attribute inference](https://stellargraph.readthedocs.io/en/latest/demos/ensembles/ensemble-node-classification-example.html) | [source](ensemble-node-classification-example.ipynb) | + +The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). diff --git a/demos/graph-classification/README.md b/demos/graph-classification/README.md index 28703ef9f..90e6b7c04 100644 --- a/demos/graph-classification/README.md +++ b/demos/graph-classification/README.md @@ -5,8 +5,10 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/graph-classification/ -| Demo (link to documentation version) | Source | +| Demo | Source | |---|---| -| [Supervised graph classification example](https://stellargraph.readthedocs.io/en/latest/demos/graph-classification/supervised-graph-classification.html) | [source](supervised-graph-classification.ipynb) | | [Supervised graph classification with Deep Graph Convolutional Neural Networks](https://stellargraph.readthedocs.io/en/latest/demos/graph-classification/dgcnn-graph-classification.html) | [source](dgcnn-graph-classification.ipynb) | +| [Supervised graph classification example](https://stellargraph.readthedocs.io/en/latest/demos/graph-classification/supervised-graph-classification.html) | [source](supervised-graph-classification.ipynb) | + +The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). diff --git a/demos/interpretability/README.md b/demos/interpretability/README.md index 7aad28016..9399a3612 100644 --- a/demos/interpretability/README.md +++ b/demos/interpretability/README.md @@ -5,10 +5,12 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/interpretability/ -| Demo (link to documentation version) | Source | +| Demo | Source | |---|---| | [Interpreting Nodes and Edges by Saliency Maps in GAT](https://stellargraph.readthedocs.io/en/latest/demos/interpretability/gat/node-link-importance-demo-gat.html) | [source](gat/node-link-importance-demo-gat.ipynb) | | [Intepretability on Hateful Twitter Datasets](https://stellargraph.readthedocs.io/en/latest/demos/interpretability/gcn/hateful-twitters-interpretability.html) | [source](gcn/hateful-twitters-interpretability.ipynb) | -| [Interpreting Nodes and Edges by Saliency Maps in GCN](https://stellargraph.readthedocs.io/en/latest/demos/interpretability/gcn/node-link-importance-demo-gcn.html) | [source](gcn/node-link-importance-demo-gcn.ipynb) | | [Interpreting Nodes and Edges by Saliency Maps in GCN (sparse)](https://stellargraph.readthedocs.io/en/latest/demos/interpretability/gcn/node-link-importance-demo-gcn-sparse.html) | [source](gcn/node-link-importance-demo-gcn-sparse.ipynb) | +| [Interpreting Nodes and Edges by Saliency Maps in GCN](https://stellargraph.readthedocs.io/en/latest/demos/interpretability/gcn/node-link-importance-demo-gcn.html) | [source](gcn/node-link-importance-demo-gcn.ipynb) | + +The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). diff --git a/demos/link-prediction/README.md b/demos/link-prediction/README.md index 7ba132d9e..d3b6d1091 100644 --- a/demos/link-prediction/README.md +++ b/demos/link-prediction/README.md @@ -5,14 +5,16 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/ -| Demo (link to documentation version) | Source | +| Demo | Source | |---|---| -| [Link prediction example: GraphSAGE on the Cora citation dataset](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/graphsage/cora-links-example.html) | [source](graphsage/cora-links-example.ipynb) | -| [Link prediction with Node2Vec on Cora](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/random-walks/cora-lp-demo.html) | [source](random-walks/cora-lp-demo.ipynb) | -| [Continuous-Time Dynamic Network Embeddings](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/random-walks/ctdne-link-prediction.html) | [source](random-walks/ctdne-link-prediction.ipynb) | | [Inductive Node Representation Learning through attri2vec](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/attri2vec/stellargraph-attri2vec-DBLP.html) | [source](attri2vec/stellargraph-attri2vec-DBLP.ipynb) | +| [Link prediction example: GCN on the Cora citation dataset](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/gcn/cora-gcn-links-example.html) | [source](gcn/cora-gcn-links-example.ipynb) | +| [Link prediction example: GraphSAGE on the Cora citation dataset](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/graphsage/cora-links-example.html) | [source](graphsage/cora-links-example.ipynb) | | [Stellargraph example: Heterogeneous GraphSAGE on the Movielens recommendation dataset](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/hinsage/movielens-recommender.html) | [source](hinsage/movielens-recommender.ipynb) | | [ComplEx on WN18 and FB15K](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/knowledge-graphs/complex.html) | [source](knowledge-graphs/complex.ipynb) | | [DistMult on WN18 and FB15K](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/knowledge-graphs/distmult.html) | [source](knowledge-graphs/distmult.ipynb) | -| [Link prediction example: GCN on the Cora citation dataset](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/gcn/cora-gcn-links-example.html) | [source](gcn/cora-gcn-links-example.ipynb) | +| [Link prediction with Node2Vec on Cora](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/random-walks/cora-lp-demo.html) | [source](random-walks/cora-lp-demo.ipynb) | +| [Continuous-Time Dynamic Network Embeddings](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/random-walks/ctdne-link-prediction.html) | [source](random-walks/ctdne-link-prediction.ipynb) | + +The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). diff --git a/demos/link-prediction/attri2vec/README.md b/demos/link-prediction/attri2vec/README.md index 50729b4cb..3d006f603 100644 --- a/demos/link-prediction/attri2vec/README.md +++ b/demos/link-prediction/attri2vec/README.md @@ -5,7 +5,9 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/attri2vec/ -| Demo (link to documentation version) | Source | +| Demo | Source | |---|---| | [Inductive Node Representation Learning through attri2vec](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/attri2vec/stellargraph-attri2vec-DBLP.html) | [source](stellargraph-attri2vec-DBLP.ipynb) | + +The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). diff --git a/demos/link-prediction/graphsage/README.md b/demos/link-prediction/graphsage/README.md index 46fb69a26..e712fe2cd 100644 --- a/demos/link-prediction/graphsage/README.md +++ b/demos/link-prediction/graphsage/README.md @@ -5,7 +5,9 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/graphsage/ -| Demo (link to documentation version) | Source | +| Demo | Source | |---|---| | [Link prediction example: GraphSAGE on the Cora citation dataset](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/graphsage/cora-links-example.html) | [source](cora-links-example.ipynb) | + +The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). diff --git a/demos/link-prediction/hinsage/README.md b/demos/link-prediction/hinsage/README.md index dabfacaaf..af35ce112 100644 --- a/demos/link-prediction/hinsage/README.md +++ b/demos/link-prediction/hinsage/README.md @@ -5,7 +5,9 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/hinsage/ -| Demo (link to documentation version) | Source | +| Demo | Source | |---|---| | [Stellargraph example: Heterogeneous GraphSAGE on the Movielens recommendation dataset](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/hinsage/movielens-recommender.html) | [source](movielens-recommender.ipynb) | + +The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). diff --git a/demos/link-prediction/random-walks/README.md b/demos/link-prediction/random-walks/README.md index 0737505c4..856a572b5 100644 --- a/demos/link-prediction/random-walks/README.md +++ b/demos/link-prediction/random-walks/README.md @@ -5,8 +5,10 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/random-walks/ -| Demo (link to documentation version) | Source | +| Demo | Source | |---|---| | [Link prediction with Node2Vec on Cora](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/random-walks/cora-lp-demo.html) | [source](cora-lp-demo.ipynb) | | [Continuous-Time Dynamic Network Embeddings](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/random-walks/ctdne-link-prediction.html) | [source](ctdne-link-prediction.ipynb) | + +The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). diff --git a/demos/node-classification/README.md b/demos/node-classification/README.md index b6a110db3..fceabd1c1 100644 --- a/demos/node-classification/README.md +++ b/demos/node-classification/README.md @@ -5,18 +5,20 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/node-classification/ -| Demo (link to documentation version) | Source | +| Demo | Source | |---|---| +| [Node Representation Learning with attri2vec on Citeseer](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/attri2vec/attri2vec-citeseer-node-classification-example.html) | [source](attri2vec/attri2vec-citeseer-node-classification-example.ipynb) | +| [Cluster-GCN for node classification](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/cluster-gcn/cluster-gcn-node-classification.html) | [source](cluster-gcn/cluster-gcn-node-classification.ipynb) | | [Stellargraph example: Graph Attention Network (GAT) on the CORA citation dataset](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/gat/gat-cora-node-classification-example.html) | [source](gat/gat-cora-node-classification-example.ipynb) | -| [Inductive representation learning using GraphSAGE on the Pubmed-Diabetes citation network ](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/graphsage-pubmed-inductive-node-classification-example.html) | [source](graphsage/graphsage-pubmed-inductive-node-classification-example.ipynb) | +| [Graph Convolutional Network (GCN) on the CORA citation dataset](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/gcn/gcn-cora-node-classification-example.html) | [source](gcn/gcn-cora-node-classification-example.ipynb) | | [Stellargraph example: Fully directed GraphSAGE on a directed CORA citation network](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/directed-graphsage-on-cora-example.html) | [source](graphsage/directed-graphsage-on-cora-example.ipynb) | | [Stellargraph example: GraphSAGE on the CORA citation network](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/graphsage-cora-node-classification-example.html) | [source](graphsage/graphsage-cora-node-classification-example.ipynb) | -| [Stellargraph example: Personalised Propagation of Neural Predictions (PPNP) and Approximate PPNP (APPNP) on the CORA citation dataset](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/ppnp/ppnp-cora-node-classification-example.html) | [source](ppnp/ppnp-cora-node-classification-example.ipynb) | -| [Cluster-GCN for node classification](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/cluster-gcn/cluster-gcn-node-classification.html) | [source](cluster-gcn/cluster-gcn-node-classification.ipynb) | -| [Node2Vec with weighted random walks](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/node2vec/stellargraph-node2vec-weighted-random-walks.html) | [source](node2vec/stellargraph-node2vec-weighted-random-walks.ipynb) | +| [Inductive representation learning using GraphSAGE on the Pubmed-Diabetes citation network ](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/graphsage-pubmed-inductive-node-classification-example.html) | [source](graphsage/graphsage-pubmed-inductive-node-classification-example.ipynb) | | [Node classification with Node2Vec on Cora](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/node2vec/stellargraph-node2vec-node-classification.html) | [source](node2vec/stellargraph-node2vec-node-classification.ipynb) | -| [Stellargraph example: Simplified Graph Convolutions (SGC) on the CORA citation dataset](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/sgc/sgc-node-classification-example.html) | [source](sgc/sgc-node-classification-example.ipynb) | -| [Node Representation Learning with attri2vec on Citeseer](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/attri2vec/attri2vec-citeseer-node-classification-example.html) | [source](attri2vec/attri2vec-citeseer-node-classification-example.ipynb) | +| [Node2Vec with weighted random walks](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/node2vec/stellargraph-node2vec-weighted-random-walks.html) | [source](node2vec/stellargraph-node2vec-weighted-random-walks.ipynb) | +| [Stellargraph example: Personalised Propagation of Neural Predictions (PPNP) and Approximate PPNP (APPNP) on the CORA citation dataset](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/ppnp/ppnp-cora-node-classification-example.html) | [source](ppnp/ppnp-cora-node-classification-example.ipynb) | | [Stellargraph example: Relational Graph Convolutional Network (RGCN) on the AIFB relational dataset](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/rgcn/rgcn-aifb-node-classification-example.html) | [source](rgcn/rgcn-aifb-node-classification-example.ipynb) | -| [Graph Convolutional Network (GCN) on the CORA citation dataset](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/gcn/gcn-cora-node-classification-example.html) | [source](gcn/gcn-cora-node-classification-example.ipynb) | +| [Stellargraph example: Simplified Graph Convolutions (SGC) on the CORA citation dataset](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/sgc/sgc-node-classification-example.html) | [source](sgc/sgc-node-classification-example.ipynb) | + +The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). diff --git a/demos/node-classification/attri2vec/README.md b/demos/node-classification/attri2vec/README.md index 77d8d73f5..b4c810ea5 100644 --- a/demos/node-classification/attri2vec/README.md +++ b/demos/node-classification/attri2vec/README.md @@ -5,7 +5,9 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/node-classification/attri2vec/ -| Demo (link to documentation version) | Source | +| Demo | Source | |---|---| | [Node Representation Learning with attri2vec on Citeseer](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/attri2vec/attri2vec-citeseer-node-classification-example.html) | [source](attri2vec-citeseer-node-classification-example.ipynb) | + +The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). diff --git a/demos/node-classification/gat/README.md b/demos/node-classification/gat/README.md index f20216383..a94ed52ac 100644 --- a/demos/node-classification/gat/README.md +++ b/demos/node-classification/gat/README.md @@ -5,7 +5,9 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/node-classification/gat/ -| Demo (link to documentation version) | Source | +| Demo | Source | |---|---| | [Stellargraph example: Graph Attention Network (GAT) on the CORA citation dataset](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/gat/gat-cora-node-classification-example.html) | [source](gat-cora-node-classification-example.ipynb) | + +The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). diff --git a/demos/node-classification/gcn/README.md b/demos/node-classification/gcn/README.md index 6475f9d98..2e992a7e7 100644 --- a/demos/node-classification/gcn/README.md +++ b/demos/node-classification/gcn/README.md @@ -5,7 +5,9 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/node-classification/gcn/ -| Demo (link to documentation version) | Source | +| Demo | Source | |---|---| | [Graph Convolutional Network (GCN) on the CORA citation dataset](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/gcn/gcn-cora-node-classification-example.html) | [source](gcn-cora-node-classification-example.ipynb) | + +The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). diff --git a/demos/node-classification/graphsage/README.md b/demos/node-classification/graphsage/README.md index 37f57b910..710cf66ac 100644 --- a/demos/node-classification/graphsage/README.md +++ b/demos/node-classification/graphsage/README.md @@ -5,9 +5,11 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/ -| Demo (link to documentation version) | Source | +| Demo | Source | |---|---| -| [Inductive representation learning using GraphSAGE on the Pubmed-Diabetes citation network ](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/graphsage-pubmed-inductive-node-classification-example.html) | [source](graphsage-pubmed-inductive-node-classification-example.ipynb) | | [Stellargraph example: Fully directed GraphSAGE on a directed CORA citation network](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/directed-graphsage-on-cora-example.html) | [source](directed-graphsage-on-cora-example.ipynb) | | [Stellargraph example: GraphSAGE on the CORA citation network](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/graphsage-cora-node-classification-example.html) | [source](graphsage-cora-node-classification-example.ipynb) | +| [Inductive representation learning using GraphSAGE on the Pubmed-Diabetes citation network ](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/graphsage-pubmed-inductive-node-classification-example.html) | [source](graphsage-pubmed-inductive-node-classification-example.ipynb) | + +The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). diff --git a/demos/node-classification/hinsage/README.md b/demos/node-classification/hinsage/README.md index b08fbb9c0..ce9252183 100644 --- a/demos/node-classification/hinsage/README.md +++ b/demos/node-classification/hinsage/README.md @@ -5,6 +5,8 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/node-classification/hinsage/ -| Demo (link to documentation version) | Source | +| Demo | Source | |---|---| + +The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). diff --git a/demos/node-classification/node2vec/README.md b/demos/node-classification/node2vec/README.md index 7a2d8481f..55b85e8a6 100644 --- a/demos/node-classification/node2vec/README.md +++ b/demos/node-classification/node2vec/README.md @@ -5,8 +5,10 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/node-classification/node2vec/ -| Demo (link to documentation version) | Source | +| Demo | Source | |---|---| -| [Node2Vec with weighted random walks](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/node2vec/stellargraph-node2vec-weighted-random-walks.html) | [source](stellargraph-node2vec-weighted-random-walks.ipynb) | | [Node classification with Node2Vec on Cora](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/node2vec/stellargraph-node2vec-node-classification.html) | [source](stellargraph-node2vec-node-classification.ipynb) | +| [Node2Vec with weighted random walks](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/node2vec/stellargraph-node2vec-weighted-random-walks.html) | [source](stellargraph-node2vec-weighted-random-walks.ipynb) | + +The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). diff --git a/demos/node-classification/ppnp/README.md b/demos/node-classification/ppnp/README.md index 58ace080c..5ef839858 100644 --- a/demos/node-classification/ppnp/README.md +++ b/demos/node-classification/ppnp/README.md @@ -5,7 +5,9 @@ These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/node-classification/ppnp/ -| Demo (link to documentation version) | Source | +| Demo | Source | |---|---| | [Stellargraph example: Personalised Propagation of Neural Predictions (PPNP) and Approximate PPNP (APPNP) on the CORA citation dataset](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/ppnp/ppnp-cora-node-classification-example.html) | [source](ppnp-cora-node-classification-example.ipynb) | + +The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). diff --git a/scripts/demo_indexing.py b/scripts/demo_indexing.py index a20995cba..9462dcea3 100644 --- a/scripts/demo_indexing.py +++ b/scripts/demo_indexing.py @@ -560,9 +560,10 @@ def demo_listing_table(root): os.chdir(root) try: - yield "| Demo (link to documentation version) | Source |" + yield "| Demo | Source |" yield "|---|---|" - for demo in glob.iglob("**/*.ipynb", recursive=True): + # sort the demos to get a consistent order, independent of the file system traversal order + for demo in sorted(glob.iglob("**/*.ipynb", recursive=True)): if ".ipynb_checkpoint" in demo: continue @@ -598,17 +599,23 @@ def demo_indexing(action): link = f"{DOC_URL_BASE}/{directory}" if directory != root_dir: - # the root readme already has the detailed table in it + # the root readme already has the detailed table in it, so don't include the full list + # of demos there. + listing = "\n".join(demo_listing_table(directory)) + suffix = "The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution)." else: listing = "" + suffix = "" new_contents = f"""\ These demos are displayed with detailed descriptions in the documentation: {link} -{listing}""" +{listing} + +{suffix}""" separate_compare_overwrite( readme, From 2a2c33935080adda5580a07a584f7d8c0832d741 Mon Sep 17 00:00:00 2001 From: Huon Wilson Date: Mon, 4 May 2020 10:43:23 +1000 Subject: [PATCH 15/43] Generate properly, remove node2vec README --- demos/embeddings/README.md | 3 - .../random-walks/utils/node2vec/README.md | 57 ------------------- 2 files changed, 60 deletions(-) delete mode 100644 demos/link-prediction/random-walks/utils/node2vec/README.md diff --git a/demos/embeddings/README.md b/demos/embeddings/README.md index 053a5281d..42b482aa1 100644 --- a/demos/embeddings/README.md +++ b/demos/embeddings/README.md @@ -7,10 +7,7 @@ These demos are displayed with detailed descriptions in the documentation: https | Demo | Source | |---|---| -| [GCN Deep Graph Infomax on MovieLens](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/deep-graph-infomax-aifb.html) | [source](deep-graph-infomax-aifb.ipynb) | -| [GCN Deep Graph Infomax on MovieLens](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/deep-graph-infomax-blogcatalog3.html) | [source](deep-graph-infomax-blogcatalog3.ipynb) | | [GCN Deep Graph Infomax on CORA](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/deep-graph-infomax-cora.html) | [source](deep-graph-infomax-cora.ipynb) | -| [GCN Deep Graph Infomax on MovieLens](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/deep-graph-infomax-movielens.html) | [source](deep-graph-infomax-movielens.ipynb) | | [Graph representation learning through Unsupervised GraphSAGE](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/embeddings-unsupervised-graphsage-cora.html) | [source](embeddings-unsupervised-graphsage-cora.ipynb) | | [GraphWave aglorithm on a barbell graph](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/graphwave-barbell.html) | [source](graphwave-barbell.ipynb) | | [Node Representation Learning with attri2vec on Citeseer](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/stellargraph-attri2vec-citeseer.html) | [source](stellargraph-attri2vec-citeseer.ipynb) | diff --git a/demos/link-prediction/random-walks/utils/node2vec/README.md b/demos/link-prediction/random-walks/utils/node2vec/README.md deleted file mode 100644 index 5450de3e4..000000000 --- a/demos/link-prediction/random-walks/utils/node2vec/README.md +++ /dev/null @@ -1,57 +0,0 @@ -The core repository for node2vec is cloned from https://github.com/aditya-grover/node2vec - -# node2vec - -This repository provides a reference implementation of *node2vec* as described in the paper:
-> node2vec: Scalable Feature Learning for Networks.
-> Aditya Grover and Jure Leskovec.
-> Knowledge Discovery and Data Mining, 2016.
-> - -The *node2vec* algorithm learns continuous representations for nodes in any (un)directed, (un)weighted graph. Please check the [project page](https://snap.stanford.edu/node2vec/) for more details. - -### Basic Usage - -#### Example -To run *node2vec* on Zachary's karate club network, execute the following command from the project home directory:
- ``python main.py --input graph/karate.edgelist --output emb/karate.emd`` - -#### Options -You can check out the other options available to use with *node2vec* using:
- ``python main.py --help`` - -#### Input -The supported input format is an edgelist: - - node1_id_int node2_id_int - -The graph is assumed to be undirected and unweighted by default. These options can be changed by setting the appropriate flags. - -#### Output -The output file has *n+1* lines for a graph with *n* vertices. -The first line has the following format: - - num_of_nodes dim_of_representation - -The next *n* lines are as follows: - - node_id dim1 dim2 ... dimd - -where dim1, ... , dimd is the *d*-dimensional representation learned by *node2vec*. - -### Citing -If you find *node2vec* useful for your research, please consider citing the following paper: - - @inproceedings{node2vec-kdd2016, - author = {Grover, Aditya and Leskovec, Jure}, - title = {node2vec: Scalable Feature Learning for Networks}, - booktitle = {Proceedings of the 22nd ACM SIGKDD International Conference on Knowledge Discovery and Data Mining}, - year = {2016} - } - - -### Miscellaneous - -Please send any questions you might have about the code and/or the algorithm to . - -*Note:* This is only a reference implementation of the *node2vec* algorithm and could benefit from several performance enhancement schemes, some of which are discussed in the paper. From 8a922a80e7ef0b51569637c9bd72564d8d0c0946 Mon Sep 17 00:00:00 2001 From: Huon Wilson Date: Mon, 4 May 2020 17:58:38 +1000 Subject: [PATCH 16/43] Add time-series README --- demos/time-series/README.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/demos/time-series/README.md b/demos/time-series/README.md index 384cf8b27..8a57f10cc 100644 --- a/demos/time-series/README.md +++ b/demos/time-series/README.md @@ -1 +1,13 @@ # Graphs with time series and sequence data using StellarGraph + + + + +These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/time-series/ + +| Demo | Source | +|---|---| +| [Forecasting using spatio-temporal data with combined Graph Convolution + LSTM model](https://stellargraph.readthedocs.io/en/latest/demos/time-series/gcn-lstm-LA.html) | [source](gcn-lstm-LA.ipynb) | + +The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). + From ac8b4a5ce3e224d24962f52a65870f62020ea1be Mon Sep 17 00:00:00 2001 From: Huon Wilson Date: Mon, 4 May 2020 17:59:00 +1000 Subject: [PATCH 17/43] Switch to stable --- scripts/demo_indexing.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/scripts/demo_indexing.py b/scripts/demo_indexing.py index 7b3ccbaa1..070b13501 100644 --- a/scripts/demo_indexing.py +++ b/scripts/demo_indexing.py @@ -32,8 +32,7 @@ HTML_INDENT = 2 LINK_DEFAULT_TEXT = "demo" TRUE_TEXT = "yes" -# FIXME: this should point to stable, not latest -DOC_URL_BASE = "https://stellargraph.readthedocs.io/en/latest" +DOC_URL_BASE = "https://stellargraph.readthedocs.io/en/stable" AUTOGENERATED_PROMPT = ( f"autogenerated by {__file__}, edit that file instead of this location" ) From 9237d2e056c291e072ed9157e4b9f3f09bb6477a Mon Sep 17 00:00:00 2001 From: Huon Wilson Date: Mon, 4 May 2020 17:59:31 +1000 Subject: [PATCH 18/43] Regenerate --- demos/README.md | 2 +- demos/basics/README.md | 8 +++--- demos/calibration/README.md | 6 ++--- demos/community_detection/README.md | 4 +-- demos/connector/neo4j/README.md | 8 +++--- demos/embeddings/README.md | 16 ++++++------ demos/ensembles/README.md | 6 ++--- demos/graph-classification/README.md | 6 ++--- demos/interpretability/README.md | 10 +++---- demos/link-prediction/README.md | 18 ++++++------- demos/link-prediction/attri2vec/README.md | 4 +-- demos/link-prediction/graphsage/README.md | 4 +-- demos/link-prediction/hinsage/README.md | 4 +-- demos/link-prediction/random-walks/README.md | 6 ++--- demos/node-classification/README.md | 26 +++++++++---------- demos/node-classification/attri2vec/README.md | 4 +-- demos/node-classification/gat/README.md | 4 +-- demos/node-classification/gcn/README.md | 4 +-- demos/node-classification/graphsage/README.md | 8 +++--- demos/node-classification/hinsage/README.md | 2 +- demos/node-classification/node2vec/README.md | 6 ++--- demos/node-classification/ppnp/README.md | 4 +-- demos/time-series/README.md | 4 +-- 23 files changed, 82 insertions(+), 82 deletions(-) diff --git a/demos/README.md b/demos/README.md index a273271c2..f26b4a54e 100644 --- a/demos/README.md +++ b/demos/README.md @@ -3,7 +3,7 @@ -These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/ +These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/stable/demos/ diff --git a/demos/basics/README.md b/demos/basics/README.md index 529d13f9b..1a4f0ff55 100644 --- a/demos/basics/README.md +++ b/demos/basics/README.md @@ -3,13 +3,13 @@ -These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/basics/ +These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/stable/demos/basics/ | Demo | Source | |---|---| -| [Loading data into StellarGraph from NetworkX](https://stellargraph.readthedocs.io/en/latest/demos/basics/loading-networkx.html) | [source](loading-networkx.ipynb) | -| [Loading data into StellarGraph from Pandas](https://stellargraph.readthedocs.io/en/latest/demos/basics/loading-pandas.html) | [source](loading-pandas.ipynb) | -| [Loading and saving data between StellarGraph and Neo4j](https://stellargraph.readthedocs.io/en/latest/demos/basics/loading-saving-neo4j.html) | [source](loading-saving-neo4j.ipynb) | +| [Loading data into StellarGraph from NetworkX](https://stellargraph.readthedocs.io/en/stable/demos/basics/loading-networkx.html) | [source](loading-networkx.ipynb) | +| [Loading data into StellarGraph from Pandas](https://stellargraph.readthedocs.io/en/stable/demos/basics/loading-pandas.html) | [source](loading-pandas.ipynb) | +| [Loading and saving data between StellarGraph and Neo4j](https://stellargraph.readthedocs.io/en/stable/demos/basics/loading-saving-neo4j.html) | [source](loading-saving-neo4j.ipynb) | The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). diff --git a/demos/calibration/README.md b/demos/calibration/README.md index f4346ee10..450e6f950 100644 --- a/demos/calibration/README.md +++ b/demos/calibration/README.md @@ -3,12 +3,12 @@ -These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/calibration/ +These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/stable/demos/calibration/ | Demo | Source | |---|---| -| [Link prediction example and calibration: GraphSAGE on the PubMed-Diabetes citation dataset](https://stellargraph.readthedocs.io/en/latest/demos/calibration/calibration-pubmed-link-prediction.html) | [source](calibration-pubmed-link-prediction.ipynb) | -| [Node Attribute Inference (multi-class) using GraphSAGE and the Pubmed-Diabetes citation network with calibration](https://stellargraph.readthedocs.io/en/latest/demos/calibration/calibration-pubmed-node-classification.html) | [source](calibration-pubmed-node-classification.ipynb) | +| [Link prediction example and calibration: GraphSAGE on the PubMed-Diabetes citation dataset](https://stellargraph.readthedocs.io/en/stable/demos/calibration/calibration-pubmed-link-prediction.html) | [source](calibration-pubmed-link-prediction.ipynb) | +| [Node Attribute Inference (multi-class) using GraphSAGE and the Pubmed-Diabetes citation network with calibration](https://stellargraph.readthedocs.io/en/stable/demos/calibration/calibration-pubmed-node-classification.html) | [source](calibration-pubmed-node-classification.ipynb) | The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). diff --git a/demos/community_detection/README.md b/demos/community_detection/README.md index 9edf0c33e..9cb33c38e 100644 --- a/demos/community_detection/README.md +++ b/demos/community_detection/README.md @@ -3,11 +3,11 @@ -These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/community_detection/ +These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/stable/demos/community_detection/ | Demo | Source | |---|---| -| [Comparison of clustering of node embeddings with a traditional community detection method](https://stellargraph.readthedocs.io/en/latest/demos/community_detection/attacks_clustering_analysis.html) | [source](attacks_clustering_analysis.ipynb) | +| [Comparison of clustering of node embeddings with a traditional community detection method](https://stellargraph.readthedocs.io/en/stable/demos/community_detection/attacks_clustering_analysis.html) | [source](attacks_clustering_analysis.ipynb) | The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). diff --git a/demos/connector/neo4j/README.md b/demos/connector/neo4j/README.md index a5555024a..ddb5fcec7 100644 --- a/demos/connector/neo4j/README.md +++ b/demos/connector/neo4j/README.md @@ -3,13 +3,13 @@ -These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/connector/neo4j/ +These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/stable/demos/connector/neo4j/ | Demo | Source | |---|---| -| [Stellargraph example: directed CORA citation network with directed GraphSAGE and Neo4J.](https://stellargraph.readthedocs.io/en/latest/demos/connector/neo4j/directed-graphsage-on-cora-neo4j-example.html) | [source](directed-graphsage-on-cora-neo4j-example.ipynb) | -| [Notebook demo on loading Cora dataset into Neo4J Database](https://stellargraph.readthedocs.io/en/latest/demos/connector/neo4j/load-cora-into-neo4j.html) | [source](load-cora-into-neo4j.ipynb) | -| [Undirected GraphSAGE on the CORA citation network using StellarGraph and Neo4j](https://stellargraph.readthedocs.io/en/latest/demos/connector/neo4j/undirected-graphsage-on-cora-neo4j-example.html) | [source](undirected-graphsage-on-cora-neo4j-example.ipynb) | +| [Stellargraph example: directed CORA citation network with directed GraphSAGE and Neo4J.](https://stellargraph.readthedocs.io/en/stable/demos/connector/neo4j/directed-graphsage-on-cora-neo4j-example.html) | [source](directed-graphsage-on-cora-neo4j-example.ipynb) | +| [Notebook demo on loading Cora dataset into Neo4J Database](https://stellargraph.readthedocs.io/en/stable/demos/connector/neo4j/load-cora-into-neo4j.html) | [source](load-cora-into-neo4j.ipynb) | +| [Undirected GraphSAGE on the CORA citation network using StellarGraph and Neo4j](https://stellargraph.readthedocs.io/en/stable/demos/connector/neo4j/undirected-graphsage-on-cora-neo4j-example.html) | [source](undirected-graphsage-on-cora-neo4j-example.ipynb) | The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). diff --git a/demos/embeddings/README.md b/demos/embeddings/README.md index 42b482aa1..c51e9267e 100644 --- a/demos/embeddings/README.md +++ b/demos/embeddings/README.md @@ -3,17 +3,17 @@ -These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/embeddings/ +These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/stable/demos/embeddings/ | Demo | Source | |---|---| -| [GCN Deep Graph Infomax on CORA](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/deep-graph-infomax-cora.html) | [source](deep-graph-infomax-cora.ipynb) | -| [Graph representation learning through Unsupervised GraphSAGE](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/embeddings-unsupervised-graphsage-cora.html) | [source](embeddings-unsupervised-graphsage-cora.ipynb) | -| [GraphWave aglorithm on a barbell graph](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/graphwave-barbell.html) | [source](graphwave-barbell.ipynb) | -| [Node Representation Learning with attri2vec on Citeseer](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/stellargraph-attri2vec-citeseer.html) | [source](stellargraph-attri2vec-citeseer.ipynb) | -| [Node representation learning with Metapath2Vec on BlogCatalog3](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/stellargraph-metapath2vec.html) | [source](stellargraph-metapath2vec.ipynb) | -| [Node representation learning with Node2Vec on Cora](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/stellargraph-node2vec.html) | [source](stellargraph-node2vec.ipynb) | -| [Node representation learning with Watch Your Step on Cora](https://stellargraph.readthedocs.io/en/latest/demos/embeddings/watch-your-step-cora-demo.html) | [source](watch-your-step-cora-demo.ipynb) | +| [GCN Deep Graph Infomax on CORA](https://stellargraph.readthedocs.io/en/stable/demos/embeddings/deep-graph-infomax-cora.html) | [source](deep-graph-infomax-cora.ipynb) | +| [Graph representation learning through Unsupervised GraphSAGE](https://stellargraph.readthedocs.io/en/stable/demos/embeddings/embeddings-unsupervised-graphsage-cora.html) | [source](embeddings-unsupervised-graphsage-cora.ipynb) | +| [GraphWave aglorithm on a barbell graph](https://stellargraph.readthedocs.io/en/stable/demos/embeddings/graphwave-barbell.html) | [source](graphwave-barbell.ipynb) | +| [Node Representation Learning with attri2vec on Citeseer](https://stellargraph.readthedocs.io/en/stable/demos/embeddings/stellargraph-attri2vec-citeseer.html) | [source](stellargraph-attri2vec-citeseer.ipynb) | +| [Node representation learning with Metapath2Vec on BlogCatalog3](https://stellargraph.readthedocs.io/en/stable/demos/embeddings/stellargraph-metapath2vec.html) | [source](stellargraph-metapath2vec.ipynb) | +| [Node representation learning with Node2Vec on Cora](https://stellargraph.readthedocs.io/en/stable/demos/embeddings/stellargraph-node2vec.html) | [source](stellargraph-node2vec.ipynb) | +| [Node representation learning with Watch Your Step on Cora](https://stellargraph.readthedocs.io/en/stable/demos/embeddings/watch-your-step-cora-demo.html) | [source](watch-your-step-cora-demo.ipynb) | The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). diff --git a/demos/ensembles/README.md b/demos/ensembles/README.md index 7cbf525da..3570127bf 100644 --- a/demos/ensembles/README.md +++ b/demos/ensembles/README.md @@ -3,12 +3,12 @@ -These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/ensembles/ +These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/stable/demos/ensembles/ | Demo | Source | |---|---| -| [StellarGraph Ensemble for link prediction](https://stellargraph.readthedocs.io/en/latest/demos/ensembles/ensemble-link-prediction-example.html) | [source](ensemble-link-prediction-example.ipynb) | -| [Stellargraph Ensembles for node attribute inference](https://stellargraph.readthedocs.io/en/latest/demos/ensembles/ensemble-node-classification-example.html) | [source](ensemble-node-classification-example.ipynb) | +| [StellarGraph Ensemble for link prediction](https://stellargraph.readthedocs.io/en/stable/demos/ensembles/ensemble-link-prediction-example.html) | [source](ensemble-link-prediction-example.ipynb) | +| [Stellargraph Ensembles for node attribute inference](https://stellargraph.readthedocs.io/en/stable/demos/ensembles/ensemble-node-classification-example.html) | [source](ensemble-node-classification-example.ipynb) | The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). diff --git a/demos/graph-classification/README.md b/demos/graph-classification/README.md index 90e6b7c04..ff04d78b1 100644 --- a/demos/graph-classification/README.md +++ b/demos/graph-classification/README.md @@ -3,12 +3,12 @@ -These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/graph-classification/ +These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/stable/demos/graph-classification/ | Demo | Source | |---|---| -| [Supervised graph classification with Deep Graph Convolutional Neural Networks](https://stellargraph.readthedocs.io/en/latest/demos/graph-classification/dgcnn-graph-classification.html) | [source](dgcnn-graph-classification.ipynb) | -| [Supervised graph classification example](https://stellargraph.readthedocs.io/en/latest/demos/graph-classification/supervised-graph-classification.html) | [source](supervised-graph-classification.ipynb) | +| [Supervised graph classification with Deep Graph Convolutional Neural Networks](https://stellargraph.readthedocs.io/en/stable/demos/graph-classification/dgcnn-graph-classification.html) | [source](dgcnn-graph-classification.ipynb) | +| [Supervised graph classification example](https://stellargraph.readthedocs.io/en/stable/demos/graph-classification/supervised-graph-classification.html) | [source](supervised-graph-classification.ipynb) | The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). diff --git a/demos/interpretability/README.md b/demos/interpretability/README.md index 9399a3612..fc226af9b 100644 --- a/demos/interpretability/README.md +++ b/demos/interpretability/README.md @@ -3,14 +3,14 @@ -These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/interpretability/ +These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/stable/demos/interpretability/ | Demo | Source | |---|---| -| [Interpreting Nodes and Edges by Saliency Maps in GAT](https://stellargraph.readthedocs.io/en/latest/demos/interpretability/gat/node-link-importance-demo-gat.html) | [source](gat/node-link-importance-demo-gat.ipynb) | -| [Intepretability on Hateful Twitter Datasets](https://stellargraph.readthedocs.io/en/latest/demos/interpretability/gcn/hateful-twitters-interpretability.html) | [source](gcn/hateful-twitters-interpretability.ipynb) | -| [Interpreting Nodes and Edges by Saliency Maps in GCN (sparse)](https://stellargraph.readthedocs.io/en/latest/demos/interpretability/gcn/node-link-importance-demo-gcn-sparse.html) | [source](gcn/node-link-importance-demo-gcn-sparse.ipynb) | -| [Interpreting Nodes and Edges by Saliency Maps in GCN](https://stellargraph.readthedocs.io/en/latest/demos/interpretability/gcn/node-link-importance-demo-gcn.html) | [source](gcn/node-link-importance-demo-gcn.ipynb) | +| [Interpreting Nodes and Edges by Saliency Maps in GAT](https://stellargraph.readthedocs.io/en/stable/demos/interpretability/gat/node-link-importance-demo-gat.html) | [source](gat/node-link-importance-demo-gat.ipynb) | +| [Intepretability on Hateful Twitter Datasets](https://stellargraph.readthedocs.io/en/stable/demos/interpretability/gcn/hateful-twitters-interpretability.html) | [source](gcn/hateful-twitters-interpretability.ipynb) | +| [Interpreting Nodes and Edges by Saliency Maps in GCN (sparse)](https://stellargraph.readthedocs.io/en/stable/demos/interpretability/gcn/node-link-importance-demo-gcn-sparse.html) | [source](gcn/node-link-importance-demo-gcn-sparse.ipynb) | +| [Interpreting Nodes and Edges by Saliency Maps in GCN](https://stellargraph.readthedocs.io/en/stable/demos/interpretability/gcn/node-link-importance-demo-gcn.html) | [source](gcn/node-link-importance-demo-gcn.ipynb) | The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). diff --git a/demos/link-prediction/README.md b/demos/link-prediction/README.md index d3b6d1091..79d423df6 100644 --- a/demos/link-prediction/README.md +++ b/demos/link-prediction/README.md @@ -3,18 +3,18 @@ -These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/ +These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/ | Demo | Source | |---|---| -| [Inductive Node Representation Learning through attri2vec](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/attri2vec/stellargraph-attri2vec-DBLP.html) | [source](attri2vec/stellargraph-attri2vec-DBLP.ipynb) | -| [Link prediction example: GCN on the Cora citation dataset](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/gcn/cora-gcn-links-example.html) | [source](gcn/cora-gcn-links-example.ipynb) | -| [Link prediction example: GraphSAGE on the Cora citation dataset](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/graphsage/cora-links-example.html) | [source](graphsage/cora-links-example.ipynb) | -| [Stellargraph example: Heterogeneous GraphSAGE on the Movielens recommendation dataset](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/hinsage/movielens-recommender.html) | [source](hinsage/movielens-recommender.ipynb) | -| [ComplEx on WN18 and FB15K](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/knowledge-graphs/complex.html) | [source](knowledge-graphs/complex.ipynb) | -| [DistMult on WN18 and FB15K](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/knowledge-graphs/distmult.html) | [source](knowledge-graphs/distmult.ipynb) | -| [Link prediction with Node2Vec on Cora](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/random-walks/cora-lp-demo.html) | [source](random-walks/cora-lp-demo.ipynb) | -| [Continuous-Time Dynamic Network Embeddings](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/random-walks/ctdne-link-prediction.html) | [source](random-walks/ctdne-link-prediction.ipynb) | +| [Inductive Node Representation Learning through attri2vec](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/attri2vec/stellargraph-attri2vec-DBLP.html) | [source](attri2vec/stellargraph-attri2vec-DBLP.ipynb) | +| [Link prediction example: GCN on the Cora citation dataset](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/gcn/cora-gcn-links-example.html) | [source](gcn/cora-gcn-links-example.ipynb) | +| [Link prediction example: GraphSAGE on the Cora citation dataset](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/graphsage/cora-links-example.html) | [source](graphsage/cora-links-example.ipynb) | +| [Stellargraph example: Heterogeneous GraphSAGE on the Movielens recommendation dataset](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/hinsage/movielens-recommender.html) | [source](hinsage/movielens-recommender.ipynb) | +| [ComplEx on WN18 and FB15K](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/knowledge-graphs/complex.html) | [source](knowledge-graphs/complex.ipynb) | +| [DistMult on WN18 and FB15K](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/knowledge-graphs/distmult.html) | [source](knowledge-graphs/distmult.ipynb) | +| [Link prediction with Node2Vec on Cora](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/random-walks/cora-lp-demo.html) | [source](random-walks/cora-lp-demo.ipynb) | +| [Continuous-Time Dynamic Network Embeddings](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/random-walks/ctdne-link-prediction.html) | [source](random-walks/ctdne-link-prediction.ipynb) | The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). diff --git a/demos/link-prediction/attri2vec/README.md b/demos/link-prediction/attri2vec/README.md index 3d006f603..fee3e3c4c 100644 --- a/demos/link-prediction/attri2vec/README.md +++ b/demos/link-prediction/attri2vec/README.md @@ -3,11 +3,11 @@ -These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/attri2vec/ +These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/attri2vec/ | Demo | Source | |---|---| -| [Inductive Node Representation Learning through attri2vec](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/attri2vec/stellargraph-attri2vec-DBLP.html) | [source](stellargraph-attri2vec-DBLP.ipynb) | +| [Inductive Node Representation Learning through attri2vec](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/attri2vec/stellargraph-attri2vec-DBLP.html) | [source](stellargraph-attri2vec-DBLP.ipynb) | The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). diff --git a/demos/link-prediction/graphsage/README.md b/demos/link-prediction/graphsage/README.md index e712fe2cd..1a95858ca 100644 --- a/demos/link-prediction/graphsage/README.md +++ b/demos/link-prediction/graphsage/README.md @@ -3,11 +3,11 @@ -These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/graphsage/ +These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/graphsage/ | Demo | Source | |---|---| -| [Link prediction example: GraphSAGE on the Cora citation dataset](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/graphsage/cora-links-example.html) | [source](cora-links-example.ipynb) | +| [Link prediction example: GraphSAGE on the Cora citation dataset](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/graphsage/cora-links-example.html) | [source](cora-links-example.ipynb) | The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). diff --git a/demos/link-prediction/hinsage/README.md b/demos/link-prediction/hinsage/README.md index af35ce112..590b88c67 100644 --- a/demos/link-prediction/hinsage/README.md +++ b/demos/link-prediction/hinsage/README.md @@ -3,11 +3,11 @@ -These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/hinsage/ +These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/hinsage/ | Demo | Source | |---|---| -| [Stellargraph example: Heterogeneous GraphSAGE on the Movielens recommendation dataset](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/hinsage/movielens-recommender.html) | [source](movielens-recommender.ipynb) | +| [Stellargraph example: Heterogeneous GraphSAGE on the Movielens recommendation dataset](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/hinsage/movielens-recommender.html) | [source](movielens-recommender.ipynb) | The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). diff --git a/demos/link-prediction/random-walks/README.md b/demos/link-prediction/random-walks/README.md index 856a572b5..537889fe4 100644 --- a/demos/link-prediction/random-walks/README.md +++ b/demos/link-prediction/random-walks/README.md @@ -3,12 +3,12 @@ -These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/random-walks/ +These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/random-walks/ | Demo | Source | |---|---| -| [Link prediction with Node2Vec on Cora](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/random-walks/cora-lp-demo.html) | [source](cora-lp-demo.ipynb) | -| [Continuous-Time Dynamic Network Embeddings](https://stellargraph.readthedocs.io/en/latest/demos/link-prediction/random-walks/ctdne-link-prediction.html) | [source](ctdne-link-prediction.ipynb) | +| [Link prediction with Node2Vec on Cora](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/random-walks/cora-lp-demo.html) | [source](cora-lp-demo.ipynb) | +| [Continuous-Time Dynamic Network Embeddings](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/random-walks/ctdne-link-prediction.html) | [source](ctdne-link-prediction.ipynb) | The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). diff --git a/demos/node-classification/README.md b/demos/node-classification/README.md index fceabd1c1..bd68dc2f6 100644 --- a/demos/node-classification/README.md +++ b/demos/node-classification/README.md @@ -3,22 +3,22 @@ -These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/node-classification/ +These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/stable/demos/node-classification/ | Demo | Source | |---|---| -| [Node Representation Learning with attri2vec on Citeseer](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/attri2vec/attri2vec-citeseer-node-classification-example.html) | [source](attri2vec/attri2vec-citeseer-node-classification-example.ipynb) | -| [Cluster-GCN for node classification](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/cluster-gcn/cluster-gcn-node-classification.html) | [source](cluster-gcn/cluster-gcn-node-classification.ipynb) | -| [Stellargraph example: Graph Attention Network (GAT) on the CORA citation dataset](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/gat/gat-cora-node-classification-example.html) | [source](gat/gat-cora-node-classification-example.ipynb) | -| [Graph Convolutional Network (GCN) on the CORA citation dataset](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/gcn/gcn-cora-node-classification-example.html) | [source](gcn/gcn-cora-node-classification-example.ipynb) | -| [Stellargraph example: Fully directed GraphSAGE on a directed CORA citation network](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/directed-graphsage-on-cora-example.html) | [source](graphsage/directed-graphsage-on-cora-example.ipynb) | -| [Stellargraph example: GraphSAGE on the CORA citation network](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/graphsage-cora-node-classification-example.html) | [source](graphsage/graphsage-cora-node-classification-example.ipynb) | -| [Inductive representation learning using GraphSAGE on the Pubmed-Diabetes citation network ](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/graphsage-pubmed-inductive-node-classification-example.html) | [source](graphsage/graphsage-pubmed-inductive-node-classification-example.ipynb) | -| [Node classification with Node2Vec on Cora](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/node2vec/stellargraph-node2vec-node-classification.html) | [source](node2vec/stellargraph-node2vec-node-classification.ipynb) | -| [Node2Vec with weighted random walks](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/node2vec/stellargraph-node2vec-weighted-random-walks.html) | [source](node2vec/stellargraph-node2vec-weighted-random-walks.ipynb) | -| [Stellargraph example: Personalised Propagation of Neural Predictions (PPNP) and Approximate PPNP (APPNP) on the CORA citation dataset](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/ppnp/ppnp-cora-node-classification-example.html) | [source](ppnp/ppnp-cora-node-classification-example.ipynb) | -| [Stellargraph example: Relational Graph Convolutional Network (RGCN) on the AIFB relational dataset](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/rgcn/rgcn-aifb-node-classification-example.html) | [source](rgcn/rgcn-aifb-node-classification-example.ipynb) | -| [Stellargraph example: Simplified Graph Convolutions (SGC) on the CORA citation dataset](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/sgc/sgc-node-classification-example.html) | [source](sgc/sgc-node-classification-example.ipynb) | +| [Node Representation Learning with attri2vec on Citeseer](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/attri2vec/attri2vec-citeseer-node-classification-example.html) | [source](attri2vec/attri2vec-citeseer-node-classification-example.ipynb) | +| [Cluster-GCN for node classification](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/cluster-gcn/cluster-gcn-node-classification.html) | [source](cluster-gcn/cluster-gcn-node-classification.ipynb) | +| [Stellargraph example: Graph Attention Network (GAT) on the CORA citation dataset](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/gat/gat-cora-node-classification-example.html) | [source](gat/gat-cora-node-classification-example.ipynb) | +| [Graph Convolutional Network (GCN) on the CORA citation dataset](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/gcn/gcn-cora-node-classification-example.html) | [source](gcn/gcn-cora-node-classification-example.ipynb) | +| [Stellargraph example: Fully directed GraphSAGE on a directed CORA citation network](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/graphsage/directed-graphsage-on-cora-example.html) | [source](graphsage/directed-graphsage-on-cora-example.ipynb) | +| [Stellargraph example: GraphSAGE on the CORA citation network](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/graphsage/graphsage-cora-node-classification-example.html) | [source](graphsage/graphsage-cora-node-classification-example.ipynb) | +| [Inductive representation learning using GraphSAGE on the Pubmed-Diabetes citation network ](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/graphsage/graphsage-pubmed-inductive-node-classification-example.html) | [source](graphsage/graphsage-pubmed-inductive-node-classification-example.ipynb) | +| [Node classification with Node2Vec on Cora](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/node2vec/stellargraph-node2vec-node-classification.html) | [source](node2vec/stellargraph-node2vec-node-classification.ipynb) | +| [Node2Vec with weighted random walks](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/node2vec/stellargraph-node2vec-weighted-random-walks.html) | [source](node2vec/stellargraph-node2vec-weighted-random-walks.ipynb) | +| [Stellargraph example: Personalised Propagation of Neural Predictions (PPNP) and Approximate PPNP (APPNP) on the CORA citation dataset](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/ppnp/ppnp-cora-node-classification-example.html) | [source](ppnp/ppnp-cora-node-classification-example.ipynb) | +| [Stellargraph example: Relational Graph Convolutional Network (RGCN) on the AIFB relational dataset](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/rgcn/rgcn-aifb-node-classification-example.html) | [source](rgcn/rgcn-aifb-node-classification-example.ipynb) | +| [Stellargraph example: Simplified Graph Convolutions (SGC) on the CORA citation dataset](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/sgc/sgc-node-classification-example.html) | [source](sgc/sgc-node-classification-example.ipynb) | The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). diff --git a/demos/node-classification/attri2vec/README.md b/demos/node-classification/attri2vec/README.md index b4c810ea5..11a6cdf10 100644 --- a/demos/node-classification/attri2vec/README.md +++ b/demos/node-classification/attri2vec/README.md @@ -3,11 +3,11 @@ -These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/node-classification/attri2vec/ +These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/stable/demos/node-classification/attri2vec/ | Demo | Source | |---|---| -| [Node Representation Learning with attri2vec on Citeseer](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/attri2vec/attri2vec-citeseer-node-classification-example.html) | [source](attri2vec-citeseer-node-classification-example.ipynb) | +| [Node Representation Learning with attri2vec on Citeseer](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/attri2vec/attri2vec-citeseer-node-classification-example.html) | [source](attri2vec-citeseer-node-classification-example.ipynb) | The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). diff --git a/demos/node-classification/gat/README.md b/demos/node-classification/gat/README.md index a94ed52ac..2fb707c62 100644 --- a/demos/node-classification/gat/README.md +++ b/demos/node-classification/gat/README.md @@ -3,11 +3,11 @@ -These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/node-classification/gat/ +These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/stable/demos/node-classification/gat/ | Demo | Source | |---|---| -| [Stellargraph example: Graph Attention Network (GAT) on the CORA citation dataset](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/gat/gat-cora-node-classification-example.html) | [source](gat-cora-node-classification-example.ipynb) | +| [Stellargraph example: Graph Attention Network (GAT) on the CORA citation dataset](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/gat/gat-cora-node-classification-example.html) | [source](gat-cora-node-classification-example.ipynb) | The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). diff --git a/demos/node-classification/gcn/README.md b/demos/node-classification/gcn/README.md index 2e992a7e7..4bba8f18f 100644 --- a/demos/node-classification/gcn/README.md +++ b/demos/node-classification/gcn/README.md @@ -3,11 +3,11 @@ -These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/node-classification/gcn/ +These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/stable/demos/node-classification/gcn/ | Demo | Source | |---|---| -| [Graph Convolutional Network (GCN) on the CORA citation dataset](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/gcn/gcn-cora-node-classification-example.html) | [source](gcn-cora-node-classification-example.ipynb) | +| [Graph Convolutional Network (GCN) on the CORA citation dataset](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/gcn/gcn-cora-node-classification-example.html) | [source](gcn-cora-node-classification-example.ipynb) | The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). diff --git a/demos/node-classification/graphsage/README.md b/demos/node-classification/graphsage/README.md index 710cf66ac..9e76bf1f9 100644 --- a/demos/node-classification/graphsage/README.md +++ b/demos/node-classification/graphsage/README.md @@ -3,13 +3,13 @@ -These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/ +These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/stable/demos/node-classification/graphsage/ | Demo | Source | |---|---| -| [Stellargraph example: Fully directed GraphSAGE on a directed CORA citation network](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/directed-graphsage-on-cora-example.html) | [source](directed-graphsage-on-cora-example.ipynb) | -| [Stellargraph example: GraphSAGE on the CORA citation network](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/graphsage-cora-node-classification-example.html) | [source](graphsage-cora-node-classification-example.ipynb) | -| [Inductive representation learning using GraphSAGE on the Pubmed-Diabetes citation network ](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/graphsage/graphsage-pubmed-inductive-node-classification-example.html) | [source](graphsage-pubmed-inductive-node-classification-example.ipynb) | +| [Stellargraph example: Fully directed GraphSAGE on a directed CORA citation network](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/graphsage/directed-graphsage-on-cora-example.html) | [source](directed-graphsage-on-cora-example.ipynb) | +| [Stellargraph example: GraphSAGE on the CORA citation network](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/graphsage/graphsage-cora-node-classification-example.html) | [source](graphsage-cora-node-classification-example.ipynb) | +| [Inductive representation learning using GraphSAGE on the Pubmed-Diabetes citation network ](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/graphsage/graphsage-pubmed-inductive-node-classification-example.html) | [source](graphsage-pubmed-inductive-node-classification-example.ipynb) | The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). diff --git a/demos/node-classification/hinsage/README.md b/demos/node-classification/hinsage/README.md index ce9252183..c839f3ce6 100644 --- a/demos/node-classification/hinsage/README.md +++ b/demos/node-classification/hinsage/README.md @@ -3,7 +3,7 @@ -These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/node-classification/hinsage/ +These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/stable/demos/node-classification/hinsage/ | Demo | Source | |---|---| diff --git a/demos/node-classification/node2vec/README.md b/demos/node-classification/node2vec/README.md index 55b85e8a6..c8b3133ef 100644 --- a/demos/node-classification/node2vec/README.md +++ b/demos/node-classification/node2vec/README.md @@ -3,12 +3,12 @@ -These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/node-classification/node2vec/ +These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/stable/demos/node-classification/node2vec/ | Demo | Source | |---|---| -| [Node classification with Node2Vec on Cora](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/node2vec/stellargraph-node2vec-node-classification.html) | [source](stellargraph-node2vec-node-classification.ipynb) | -| [Node2Vec with weighted random walks](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/node2vec/stellargraph-node2vec-weighted-random-walks.html) | [source](stellargraph-node2vec-weighted-random-walks.ipynb) | +| [Node classification with Node2Vec on Cora](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/node2vec/stellargraph-node2vec-node-classification.html) | [source](stellargraph-node2vec-node-classification.ipynb) | +| [Node2Vec with weighted random walks](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/node2vec/stellargraph-node2vec-weighted-random-walks.html) | [source](stellargraph-node2vec-weighted-random-walks.ipynb) | The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). diff --git a/demos/node-classification/ppnp/README.md b/demos/node-classification/ppnp/README.md index 5ef839858..50310f74c 100644 --- a/demos/node-classification/ppnp/README.md +++ b/demos/node-classification/ppnp/README.md @@ -3,11 +3,11 @@ -These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/node-classification/ppnp/ +These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/stable/demos/node-classification/ppnp/ | Demo | Source | |---|---| -| [Stellargraph example: Personalised Propagation of Neural Predictions (PPNP) and Approximate PPNP (APPNP) on the CORA citation dataset](https://stellargraph.readthedocs.io/en/latest/demos/node-classification/ppnp/ppnp-cora-node-classification-example.html) | [source](ppnp-cora-node-classification-example.ipynb) | +| [Stellargraph example: Personalised Propagation of Neural Predictions (PPNP) and Approximate PPNP (APPNP) on the CORA citation dataset](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/ppnp/ppnp-cora-node-classification-example.html) | [source](ppnp-cora-node-classification-example.ipynb) | The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). diff --git a/demos/time-series/README.md b/demos/time-series/README.md index 8a57f10cc..9d67ea856 100644 --- a/demos/time-series/README.md +++ b/demos/time-series/README.md @@ -3,11 +3,11 @@ -These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/latest/demos/time-series/ +These demos are displayed with detailed descriptions in the documentation: https://stellargraph.readthedocs.io/en/stable/demos/time-series/ | Demo | Source | |---|---| -| [Forecasting using spatio-temporal data with combined Graph Convolution + LSTM model](https://stellargraph.readthedocs.io/en/latest/demos/time-series/gcn-lstm-LA.html) | [source](gcn-lstm-LA.ipynb) | +| [Forecasting using spatio-temporal data with combined Graph Convolution + LSTM model](https://stellargraph.readthedocs.io/en/stable/demos/time-series/gcn-lstm-LA.html) | [source](gcn-lstm-LA.ipynb) | The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). From 0ea7992c344840f0193c4e6bade6401655aae104 Mon Sep 17 00:00:00 2001 From: Huon Wilson Date: Mon, 4 May 2020 18:01:59 +1000 Subject: [PATCH 19/43] Rearrange demos to not be in nested folders --- demos/README.md | 70 ++-- ...eseer.ipynb => attri2vec-embeddings.ipynb} | 0 ...nb => deep-graph-infomax-embeddings.ipynb} | 0 ...age-unsupervised-sampler-embeddings.ipynb} | 0 ...rbell.ipynb => graphwave-embeddings.ipynb} | 0 ...ec.ipynb => metapath2vec-embeddings.ipynb} | 0 ...de2vec.ipynb => node2vec-embeddings.ipynb} | 0 ...ipynb => watch-your-step-embeddings.ipynb} | 0 ...gcn-supervised-graph-classification.ipynb} | 0 ...nb => gat-cora-node-link-importance.ipynb} | 0 ...nb => gcn-cora-node-link-importance.ipynb} | 0 ...cn-sparse-cora-node-link-importance.ipynb} | 0 .../hateful-twitters-interpretability.ipynb | 0 ....ipynb => attri2vec-link-prediction.ipynb} | 0 demos/link-prediction/attri2vec/README.md | 51 --- ...ex.ipynb => complex-link-prediction.ipynb} | 0 .../ctdne-link-prediction.ipynb | 0 ...t.ipynb => distmult-link-prediction.ipynb} | 0 ...xample.ipynb => gcn-link-prediction.ipynb} | 0 ....ipynb => graphsage-link-prediction.ipynb} | 0 demos/link-prediction/graphsage/README.md | 36 -- ...er.ipynb => hinsage-link-prediction.ipynb} | 0 demos/link-prediction/hinsage/README.md | 43 -- ...o.ipynb => node2vec-link-prediction.ipynb} | 0 demos/link-prediction/random-walks/README.md | 126 ------ demos/link-prediction/random-walks/main.py | 254 ------------ .../random-walks/utils/__init__.py | 37 -- .../random-walks/utils/cl_arguments_parser.py | 134 ------ .../utils/metapath2vec_feature_learning.py | 186 --------- .../random-walks/utils/node2vec/LICENSE.md | 21 - .../random-walks/utils/node2vec/README.md | 57 --- .../random-walks/utils/node2vec/main.py | 176 -------- .../random-walks/utils/node2vec/node2vec.py | 164 -------- .../utils/node2vec_feature_learning.py | 173 -------- .../random-walks/utils/predictors.py | 360 ---------------- .../random-walks/utils/read_graph.py | 87 ---- ...nb => attri2vec-node-classification.ipynb} | 0 demos/node-classification/attri2vec/README.md | 33 -- .../cluster-gcn-node-classification.ipynb | 0 ...ected-graphsage-node-classification.ipynb} | 0 ...le.ipynb => gat-node-classification.ipynb} | 0 demos/node-classification/gat/README.md | 26 -- ...le.ipynb => gcn-node-classification.ipynb} | 0 .../node-classification/gcn/Cora-features.png | Bin 200362 -> 0 bytes demos/node-classification/gcn/README.md | 16 - ...hsage-inductive-node-classification.ipynb} | 0 ...nb => graphsage-node-classification.ipynb} | 0 demos/node-classification/graphsage/README.md | 38 -- demos/node-classification/hinsage/README.md | 71 ---- .../hinsage/yelp-example.py | 263 ------------ .../hinsage/yelp-preprocessing.py | 383 ------------------ ...ynb => node2vec-node-classification.ipynb} | 0 ...de2vec-weighted-node-classification.ipynb} | 0 demos/node-classification/node2vec/README.md | 23 -- ...e.ipynb => ppnp-node-classification.ipynb} | 0 demos/node-classification/ppnp/README.md | 15 - ...e.ipynb => rgcn-node-classification.ipynb} | 0 ...le.ipynb => sgc-node-classification.ipynb} | 0 ...tm-LA.ipynb => gcn-lstm-time-series.ipynb} | 0 ...ted-graphsage-on-cora-neo4j-example.nblink | 3 - .../neo4j/load-cora-into-neo4j.nblink | 3 - ...ted-graphsage-on-cora-neo4j-example.nblink | 3 - .../embeddings/attri2vec-embeddings.nblink | 3 + .../embeddings/deep-graph-infomax-cora.nblink | 3 - .../deep-graph-infomax-embeddings.nblink | 3 + ...eddings-unsupervised-graphsage-cora.nblink | 3 - ...age-unsupervised-sampler-embeddings.nblink | 3 + .../demos/embeddings/graphwave-barbell.nblink | 3 - .../embeddings/graphwave-embeddings.nblink | 3 + .../embeddings/metapath2vec-embeddings.nblink | 3 + .../embeddings/node2vec-embeddings.nblink | 3 + .../stellargraph-attri2vec-citeseer.nblink | 3 - .../stellargraph-metapath2vec.nblink | 3 - .../embeddings/stellargraph-node2vec.nblink | 3 - .../watch-your-step-cora-demo.nblink | 3 - .../watch-your-step-embeddings.nblink | 3 + ...gcn-supervised-graph-classification.nblink | 3 + .../supervised-graph-classification.nblink | 3 - docs/demos/index.txt | 68 ++-- .../gat-cora-node-link-importance.nblink | 3 + .../gat/node-link-importance-demo-gat.nblink | 3 - .../gcn-cora-node-link-importance.nblink | 3 + ...cn-sparse-cora-node-link-importance.nblink | 3 + .../hateful-twitters-interpretability.nblink | 3 - ...ode-link-importance-demo-gcn-sparse.nblink | 3 - .../gcn/node-link-importance-demo-gcn.nblink | 3 - .../hateful-twitters-interpretability.nblink | 3 + .../attri2vec-link-prediction.nblink | 3 + .../stellargraph-attri2vec-DBLP.nblink | 3 - .../complex-link-prediction.nblink | 3 + .../ctdne-link-prediction.nblink | 3 + .../distmult-link-prediction.nblink | 3 + .../gcn-link-prediction.nblink | 3 + .../gcn/cora-gcn-links-example.nblink | 3 - .../graphsage-link-prediction.nblink | 3 + .../graphsage/cora-links-example.nblink | 3 - .../hinsage-link-prediction.nblink | 3 + .../hinsage/movielens-recommender.nblink | 3 - .../knowledge-graphs/complex.nblink | 3 - .../knowledge-graphs/distmult.nblink | 3 - .../node2vec-link-prediction.nblink | 3 + .../random-walks/cora-lp-demo.nblink | 3 - .../random-walks/ctdne-link-prediction.nblink | 3 - .../attri2vec-node-classification.nblink | 3 + ...iteseer-node-classification-example.nblink | 3 - .../cluster-gcn-node-classification.nblink | 3 + .../cluster-gcn-node-classification.nblink | 3 - ...ected-graphsage-node-classification.nblink | 3 + .../gat-node-classification.nblink | 3 + ...at-cora-node-classification-example.nblink | 3 - .../gcn-node-classification.nblink | 3 + ...cn-cora-node-classification-example.nblink | 3 - ...hsage-inductive-node-classification.nblink | 3 + .../graphsage-node-classification.nblink | 3 + .../directed-graphsage-on-cora-example.nblink | 3 - ...ge-cora-node-classification-example.nblink | 3 - ...ductive-node-classification-example.nblink | 3 - .../node2vec-node-classification.nblink | 3 + ...de2vec-weighted-node-classification.nblink | 3 + ...rgraph-node2vec-node-classification.nblink | 3 - ...raph-node2vec-weighted-random-walks.nblink | 3 - .../ppnp-node-classification.nblink | 3 + ...np-cora-node-classification-example.nblink | 3 - .../rgcn-node-classification.nblink | 3 + ...cn-aifb-node-classification-example.nblink | 3 - .../sgc-node-classification.nblink | 3 + .../sgc-node-classification-example.nblink | 3 - docs/demos/time-series/gcn-lstm-LA.nblink | 3 - .../time-series/gcn-lstm-time-series.nblink | 3 + scripts/demo_table.py | 66 +-- 130 files changed, 201 insertions(+), 2983 deletions(-) rename demos/embeddings/{stellargraph-attri2vec-citeseer.ipynb => attri2vec-embeddings.ipynb} (100%) rename demos/embeddings/{deep-graph-infomax-cora.ipynb => deep-graph-infomax-embeddings.ipynb} (100%) rename demos/embeddings/{embeddings-unsupervised-graphsage-cora.ipynb => graphsage-unsupervised-sampler-embeddings.ipynb} (100%) rename demos/embeddings/{graphwave-barbell.ipynb => graphwave-embeddings.ipynb} (100%) rename demos/embeddings/{stellargraph-metapath2vec.ipynb => metapath2vec-embeddings.ipynb} (100%) rename demos/embeddings/{stellargraph-node2vec.ipynb => node2vec-embeddings.ipynb} (100%) rename demos/embeddings/{watch-your-step-cora-demo.ipynb => watch-your-step-embeddings.ipynb} (100%) rename demos/graph-classification/{supervised-graph-classification.ipynb => gcn-supervised-graph-classification.ipynb} (100%) rename demos/interpretability/{gat/node-link-importance-demo-gat.ipynb => gat-cora-node-link-importance.ipynb} (100%) rename demos/interpretability/{gcn/node-link-importance-demo-gcn.ipynb => gcn-cora-node-link-importance.ipynb} (100%) rename demos/interpretability/{gcn/node-link-importance-demo-gcn-sparse.ipynb => gcn-sparse-cora-node-link-importance.ipynb} (100%) rename demos/interpretability/{gcn => }/hateful-twitters-interpretability.ipynb (100%) rename demos/link-prediction/{attri2vec/stellargraph-attri2vec-DBLP.ipynb => attri2vec-link-prediction.ipynb} (100%) delete mode 100644 demos/link-prediction/attri2vec/README.md rename demos/link-prediction/{knowledge-graphs/complex.ipynb => complex-link-prediction.ipynb} (100%) rename demos/link-prediction/{random-walks => }/ctdne-link-prediction.ipynb (100%) rename demos/link-prediction/{knowledge-graphs/distmult.ipynb => distmult-link-prediction.ipynb} (100%) rename demos/link-prediction/{gcn/cora-gcn-links-example.ipynb => gcn-link-prediction.ipynb} (100%) rename demos/link-prediction/{graphsage/cora-links-example.ipynb => graphsage-link-prediction.ipynb} (100%) delete mode 100644 demos/link-prediction/graphsage/README.md rename demos/link-prediction/{hinsage/movielens-recommender.ipynb => hinsage-link-prediction.ipynb} (100%) delete mode 100644 demos/link-prediction/hinsage/README.md rename demos/link-prediction/{random-walks/cora-lp-demo.ipynb => node2vec-link-prediction.ipynb} (100%) delete mode 100644 demos/link-prediction/random-walks/README.md delete mode 100644 demos/link-prediction/random-walks/main.py delete mode 100644 demos/link-prediction/random-walks/utils/__init__.py delete mode 100644 demos/link-prediction/random-walks/utils/cl_arguments_parser.py delete mode 100644 demos/link-prediction/random-walks/utils/metapath2vec_feature_learning.py delete mode 100644 demos/link-prediction/random-walks/utils/node2vec/LICENSE.md delete mode 100644 demos/link-prediction/random-walks/utils/node2vec/README.md delete mode 100644 demos/link-prediction/random-walks/utils/node2vec/main.py delete mode 100644 demos/link-prediction/random-walks/utils/node2vec/node2vec.py delete mode 100644 demos/link-prediction/random-walks/utils/node2vec_feature_learning.py delete mode 100644 demos/link-prediction/random-walks/utils/predictors.py delete mode 100644 demos/link-prediction/random-walks/utils/read_graph.py rename demos/node-classification/{attri2vec/attri2vec-citeseer-node-classification-example.ipynb => attri2vec-node-classification.ipynb} (100%) delete mode 100644 demos/node-classification/attri2vec/README.md rename demos/node-classification/{cluster-gcn => }/cluster-gcn-node-classification.ipynb (100%) rename demos/node-classification/{graphsage/directed-graphsage-on-cora-example.ipynb => directed-graphsage-node-classification.ipynb} (100%) rename demos/node-classification/{gat/gat-cora-node-classification-example.ipynb => gat-node-classification.ipynb} (100%) delete mode 100644 demos/node-classification/gat/README.md rename demos/node-classification/{gcn/gcn-cora-node-classification-example.ipynb => gcn-node-classification.ipynb} (100%) delete mode 100644 demos/node-classification/gcn/Cora-features.png delete mode 100644 demos/node-classification/gcn/README.md rename demos/node-classification/{graphsage/graphsage-pubmed-inductive-node-classification-example.ipynb => graphsage-inductive-node-classification.ipynb} (100%) rename demos/node-classification/{graphsage/graphsage-cora-node-classification-example.ipynb => graphsage-node-classification.ipynb} (100%) delete mode 100644 demos/node-classification/graphsage/README.md delete mode 100644 demos/node-classification/hinsage/README.md delete mode 100644 demos/node-classification/hinsage/yelp-example.py delete mode 100644 demos/node-classification/hinsage/yelp-preprocessing.py rename demos/node-classification/{node2vec/stellargraph-node2vec-node-classification.ipynb => node2vec-node-classification.ipynb} (100%) rename demos/node-classification/{node2vec/stellargraph-node2vec-weighted-random-walks.ipynb => node2vec-weighted-node-classification.ipynb} (100%) delete mode 100644 demos/node-classification/node2vec/README.md rename demos/node-classification/{ppnp/ppnp-cora-node-classification-example.ipynb => ppnp-node-classification.ipynb} (100%) delete mode 100644 demos/node-classification/ppnp/README.md rename demos/node-classification/{rgcn/rgcn-aifb-node-classification-example.ipynb => rgcn-node-classification.ipynb} (100%) rename demos/node-classification/{sgc/sgc-node-classification-example.ipynb => sgc-node-classification.ipynb} (100%) rename demos/time-series/{gcn-lstm-LA.ipynb => gcn-lstm-time-series.ipynb} (100%) delete mode 100644 docs/demos/connector/neo4j/directed-graphsage-on-cora-neo4j-example.nblink delete mode 100644 docs/demos/connector/neo4j/load-cora-into-neo4j.nblink delete mode 100644 docs/demos/connector/neo4j/undirected-graphsage-on-cora-neo4j-example.nblink create mode 100644 docs/demos/embeddings/attri2vec-embeddings.nblink delete mode 100644 docs/demos/embeddings/deep-graph-infomax-cora.nblink create mode 100644 docs/demos/embeddings/deep-graph-infomax-embeddings.nblink delete mode 100644 docs/demos/embeddings/embeddings-unsupervised-graphsage-cora.nblink create mode 100644 docs/demos/embeddings/graphsage-unsupervised-sampler-embeddings.nblink delete mode 100644 docs/demos/embeddings/graphwave-barbell.nblink create mode 100644 docs/demos/embeddings/graphwave-embeddings.nblink create mode 100644 docs/demos/embeddings/metapath2vec-embeddings.nblink create mode 100644 docs/demos/embeddings/node2vec-embeddings.nblink delete mode 100644 docs/demos/embeddings/stellargraph-attri2vec-citeseer.nblink delete mode 100644 docs/demos/embeddings/stellargraph-metapath2vec.nblink delete mode 100644 docs/demos/embeddings/stellargraph-node2vec.nblink delete mode 100644 docs/demos/embeddings/watch-your-step-cora-demo.nblink create mode 100644 docs/demos/embeddings/watch-your-step-embeddings.nblink create mode 100644 docs/demos/graph-classification/gcn-supervised-graph-classification.nblink delete mode 100644 docs/demos/graph-classification/supervised-graph-classification.nblink create mode 100644 docs/demos/interpretability/gat-cora-node-link-importance.nblink delete mode 100644 docs/demos/interpretability/gat/node-link-importance-demo-gat.nblink create mode 100644 docs/demos/interpretability/gcn-cora-node-link-importance.nblink create mode 100644 docs/demos/interpretability/gcn-sparse-cora-node-link-importance.nblink delete mode 100644 docs/demos/interpretability/gcn/hateful-twitters-interpretability.nblink delete mode 100644 docs/demos/interpretability/gcn/node-link-importance-demo-gcn-sparse.nblink delete mode 100644 docs/demos/interpretability/gcn/node-link-importance-demo-gcn.nblink create mode 100644 docs/demos/interpretability/hateful-twitters-interpretability.nblink create mode 100644 docs/demos/link-prediction/attri2vec-link-prediction.nblink delete mode 100644 docs/demos/link-prediction/attri2vec/stellargraph-attri2vec-DBLP.nblink create mode 100644 docs/demos/link-prediction/complex-link-prediction.nblink create mode 100644 docs/demos/link-prediction/ctdne-link-prediction.nblink create mode 100644 docs/demos/link-prediction/distmult-link-prediction.nblink create mode 100644 docs/demos/link-prediction/gcn-link-prediction.nblink delete mode 100644 docs/demos/link-prediction/gcn/cora-gcn-links-example.nblink create mode 100644 docs/demos/link-prediction/graphsage-link-prediction.nblink delete mode 100644 docs/demos/link-prediction/graphsage/cora-links-example.nblink create mode 100644 docs/demos/link-prediction/hinsage-link-prediction.nblink delete mode 100644 docs/demos/link-prediction/hinsage/movielens-recommender.nblink delete mode 100644 docs/demos/link-prediction/knowledge-graphs/complex.nblink delete mode 100644 docs/demos/link-prediction/knowledge-graphs/distmult.nblink create mode 100644 docs/demos/link-prediction/node2vec-link-prediction.nblink delete mode 100644 docs/demos/link-prediction/random-walks/cora-lp-demo.nblink delete mode 100644 docs/demos/link-prediction/random-walks/ctdne-link-prediction.nblink create mode 100644 docs/demos/node-classification/attri2vec-node-classification.nblink delete mode 100644 docs/demos/node-classification/attri2vec/attri2vec-citeseer-node-classification-example.nblink create mode 100644 docs/demos/node-classification/cluster-gcn-node-classification.nblink delete mode 100644 docs/demos/node-classification/cluster-gcn/cluster-gcn-node-classification.nblink create mode 100644 docs/demos/node-classification/directed-graphsage-node-classification.nblink create mode 100644 docs/demos/node-classification/gat-node-classification.nblink delete mode 100644 docs/demos/node-classification/gat/gat-cora-node-classification-example.nblink create mode 100644 docs/demos/node-classification/gcn-node-classification.nblink delete mode 100644 docs/demos/node-classification/gcn/gcn-cora-node-classification-example.nblink create mode 100644 docs/demos/node-classification/graphsage-inductive-node-classification.nblink create mode 100644 docs/demos/node-classification/graphsage-node-classification.nblink delete mode 100644 docs/demos/node-classification/graphsage/directed-graphsage-on-cora-example.nblink delete mode 100644 docs/demos/node-classification/graphsage/graphsage-cora-node-classification-example.nblink delete mode 100644 docs/demos/node-classification/graphsage/graphsage-pubmed-inductive-node-classification-example.nblink create mode 100644 docs/demos/node-classification/node2vec-node-classification.nblink create mode 100644 docs/demos/node-classification/node2vec-weighted-node-classification.nblink delete mode 100644 docs/demos/node-classification/node2vec/stellargraph-node2vec-node-classification.nblink delete mode 100644 docs/demos/node-classification/node2vec/stellargraph-node2vec-weighted-random-walks.nblink create mode 100644 docs/demos/node-classification/ppnp-node-classification.nblink delete mode 100644 docs/demos/node-classification/ppnp/ppnp-cora-node-classification-example.nblink create mode 100644 docs/demos/node-classification/rgcn-node-classification.nblink delete mode 100644 docs/demos/node-classification/rgcn/rgcn-aifb-node-classification-example.nblink create mode 100644 docs/demos/node-classification/sgc-node-classification.nblink delete mode 100644 docs/demos/node-classification/sgc/sgc-node-classification-example.nblink delete mode 100644 docs/demos/time-series/gcn-lstm-LA.nblink create mode 100644 docs/demos/time-series/gcn-lstm-time-series.nblink diff --git a/demos/README.md b/demos/README.md index 4cb5e09bc..32948c278 100644 --- a/demos/README.md +++ b/demos/README.md @@ -47,14 +47,14 @@ The demo notebooks can be run without any installation of Python by using Binder
- - + + - + @@ -63,7 +63,7 @@ The demo notebooks can be run without any installation of Python by using Binder - + @@ -76,7 +76,7 @@ The demo notebooks can be run without any installation of Python by using Binder - + @@ -89,7 +89,7 @@ The demo notebooks can be run without any installation of Python by using Binder - + @@ -102,11 +102,11 @@ The demo notebooks can be run without any installation of Python by using Binder - + @@ -118,7 +118,7 @@ The demo notebooks can be run without any installation of Python by using Binder - + @@ -131,7 +131,7 @@ The demo notebooks can be run without any installation of Python by using Binder - + - + @@ -165,7 +165,7 @@ The demo notebooks can be run without any installation of Python by using Binder - + @@ -176,26 +176,26 @@ The demo notebooks can be run without any installation of Python by using Binder - - - + + + - + - - + + - + @@ -206,8 +206,8 @@ The demo notebooks can be run without any installation of Python by using Binder - - + + @@ -215,12 +215,12 @@ The demo notebooks can be run without any installation of Python by using Binder - + - - - + + + @@ -233,7 +233,7 @@ The demo notebooks can be run without any installation of Python by using Binder - + @@ -245,7 +245,7 @@ The demo notebooks can be run without any installation of Python by using Binder - + @@ -257,9 +257,9 @@ The demo notebooks can be run without any installation of Python by using Binder - + - + @@ -271,7 +271,7 @@ The demo notebooks can be run without any installation of Python by using Binder - + @@ -284,7 +284,7 @@ The demo notebooks can be run without any installation of Python by using Binder - + diff --git a/demos/embeddings/stellargraph-attri2vec-citeseer.ipynb b/demos/embeddings/attri2vec-embeddings.ipynb similarity index 100% rename from demos/embeddings/stellargraph-attri2vec-citeseer.ipynb rename to demos/embeddings/attri2vec-embeddings.ipynb diff --git a/demos/embeddings/deep-graph-infomax-cora.ipynb b/demos/embeddings/deep-graph-infomax-embeddings.ipynb similarity index 100% rename from demos/embeddings/deep-graph-infomax-cora.ipynb rename to demos/embeddings/deep-graph-infomax-embeddings.ipynb diff --git a/demos/embeddings/embeddings-unsupervised-graphsage-cora.ipynb b/demos/embeddings/graphsage-unsupervised-sampler-embeddings.ipynb similarity index 100% rename from demos/embeddings/embeddings-unsupervised-graphsage-cora.ipynb rename to demos/embeddings/graphsage-unsupervised-sampler-embeddings.ipynb diff --git a/demos/embeddings/graphwave-barbell.ipynb b/demos/embeddings/graphwave-embeddings.ipynb similarity index 100% rename from demos/embeddings/graphwave-barbell.ipynb rename to demos/embeddings/graphwave-embeddings.ipynb diff --git a/demos/embeddings/stellargraph-metapath2vec.ipynb b/demos/embeddings/metapath2vec-embeddings.ipynb similarity index 100% rename from demos/embeddings/stellargraph-metapath2vec.ipynb rename to demos/embeddings/metapath2vec-embeddings.ipynb diff --git a/demos/embeddings/stellargraph-node2vec.ipynb b/demos/embeddings/node2vec-embeddings.ipynb similarity index 100% rename from demos/embeddings/stellargraph-node2vec.ipynb rename to demos/embeddings/node2vec-embeddings.ipynb diff --git a/demos/embeddings/watch-your-step-cora-demo.ipynb b/demos/embeddings/watch-your-step-embeddings.ipynb similarity index 100% rename from demos/embeddings/watch-your-step-cora-demo.ipynb rename to demos/embeddings/watch-your-step-embeddings.ipynb diff --git a/demos/graph-classification/supervised-graph-classification.ipynb b/demos/graph-classification/gcn-supervised-graph-classification.ipynb similarity index 100% rename from demos/graph-classification/supervised-graph-classification.ipynb rename to demos/graph-classification/gcn-supervised-graph-classification.ipynb diff --git a/demos/interpretability/gat/node-link-importance-demo-gat.ipynb b/demos/interpretability/gat-cora-node-link-importance.ipynb similarity index 100% rename from demos/interpretability/gat/node-link-importance-demo-gat.ipynb rename to demos/interpretability/gat-cora-node-link-importance.ipynb diff --git a/demos/interpretability/gcn/node-link-importance-demo-gcn.ipynb b/demos/interpretability/gcn-cora-node-link-importance.ipynb similarity index 100% rename from demos/interpretability/gcn/node-link-importance-demo-gcn.ipynb rename to demos/interpretability/gcn-cora-node-link-importance.ipynb diff --git a/demos/interpretability/gcn/node-link-importance-demo-gcn-sparse.ipynb b/demos/interpretability/gcn-sparse-cora-node-link-importance.ipynb similarity index 100% rename from demos/interpretability/gcn/node-link-importance-demo-gcn-sparse.ipynb rename to demos/interpretability/gcn-sparse-cora-node-link-importance.ipynb diff --git a/demos/interpretability/gcn/hateful-twitters-interpretability.ipynb b/demos/interpretability/hateful-twitters-interpretability.ipynb similarity index 100% rename from demos/interpretability/gcn/hateful-twitters-interpretability.ipynb rename to demos/interpretability/hateful-twitters-interpretability.ipynb diff --git a/demos/link-prediction/attri2vec/stellargraph-attri2vec-DBLP.ipynb b/demos/link-prediction/attri2vec-link-prediction.ipynb similarity index 100% rename from demos/link-prediction/attri2vec/stellargraph-attri2vec-DBLP.ipynb rename to demos/link-prediction/attri2vec-link-prediction.ipynb diff --git a/demos/link-prediction/attri2vec/README.md b/demos/link-prediction/attri2vec/README.md deleted file mode 100644 index 8ce7a6251..000000000 --- a/demos/link-prediction/attri2vec/README.md +++ /dev/null @@ -1,51 +0,0 @@ -# attri2vec Link Prediction for Out-of-sample Nodes - -This is an example of using the attri2vec [1] model, with a link classifier on top, -to predict links for out-of-sample nodes in a homogeneous citation network. - -In this demo, we first train the attri2vec model on the in-sample subgraph and infer -representations for out-of-sample nodes with the trained attri2vec model. Then we use the -obtained node representations to perform link prediction for out-of-sample nodes. - -The link prediction problem is treated as a supervised binary classification problem for -`(src, dst)` node pairs that make up links in the graph, with positive examples -representing links that do exist in the graph, and negative examples representing -links that don't. - -In this example, we learn to predict citation links between papers in a DBLP dataset (see below). - -## Requirements -This example assumes the `stellargraph` library and its requirements have been -installed by following the installation instructions in the README -of the library's [root directory](https://github.com/stellargraph/stellargraph). - -## DBLP dataset - -This example is tested on the DBLP dataset. The attri2vec model assumes that node -features are available. - -The following is the description of the dataset: -> The DBLP citation network is a subgraph extracted from DBLP-Citation-network V3 (https://aminer.org/citation). -> To form this subgraph, papers from four subjects are extracted according to their venue information: -> Database, Data Mining, Artificial Intelligence and Computer Vision, and papers with no citations are removed. -> The DBLP network contains 18,448 papers and 45,661 citation relations. From paper titles, we construct -> 2,476-dimensional binary node feature vectors, with each element indicating the presence/absence of the corresponding word. -> By ignoring the citation direction, we take the DBLP subgraph as an undirected network. - -Download and unzip the [DBLP.zip](https://www.kaggle.com/daozhang/dblp-subgraph) file to a location on your computer -and pass this location as a command line argument to this script. - -## Running the notebook -The narrated version of this example is available in the `stellargraph-attri2vec-DBLP.ipynb` notebook. -To run the notebook: - - Activate the python 3.6 environment in which the -`stellargraph` library is installed - - Start `jupyter-notebook` - - note: you may need to first install `jupyter` by running `pip install jupyter` in your python environment - - Navigate to the notebook (`/demos/link-prediction/attri2vec/stellargraph-attri2vec-DBLP.ipynb`), and click on - it to launch the notebook. - -## References - -[1] Attributed Network Embedding via Subspace Discovery. D. Zhang, J, Yin, X. Zhu and C. Zhang, arXiv:1901.04095, -[cs.SI], 2019. ([link](https://arxiv.org/abs/1901.04095)) diff --git a/demos/link-prediction/knowledge-graphs/complex.ipynb b/demos/link-prediction/complex-link-prediction.ipynb similarity index 100% rename from demos/link-prediction/knowledge-graphs/complex.ipynb rename to demos/link-prediction/complex-link-prediction.ipynb diff --git a/demos/link-prediction/random-walks/ctdne-link-prediction.ipynb b/demos/link-prediction/ctdne-link-prediction.ipynb similarity index 100% rename from demos/link-prediction/random-walks/ctdne-link-prediction.ipynb rename to demos/link-prediction/ctdne-link-prediction.ipynb diff --git a/demos/link-prediction/knowledge-graphs/distmult.ipynb b/demos/link-prediction/distmult-link-prediction.ipynb similarity index 100% rename from demos/link-prediction/knowledge-graphs/distmult.ipynb rename to demos/link-prediction/distmult-link-prediction.ipynb diff --git a/demos/link-prediction/gcn/cora-gcn-links-example.ipynb b/demos/link-prediction/gcn-link-prediction.ipynb similarity index 100% rename from demos/link-prediction/gcn/cora-gcn-links-example.ipynb rename to demos/link-prediction/gcn-link-prediction.ipynb diff --git a/demos/link-prediction/graphsage/cora-links-example.ipynb b/demos/link-prediction/graphsage-link-prediction.ipynb similarity index 100% rename from demos/link-prediction/graphsage/cora-links-example.ipynb rename to demos/link-prediction/graphsage-link-prediction.ipynb diff --git a/demos/link-prediction/graphsage/README.md b/demos/link-prediction/graphsage/README.md deleted file mode 100644 index f8d47c86e..000000000 --- a/demos/link-prediction/graphsage/README.md +++ /dev/null @@ -1,36 +0,0 @@ -# Graphsage Link Prediction - -This is an example of using the GraphSAGE [1] model, with a link classifier on top, -to predict links in a homogeneous citation network. - -The link prediction problem is treated as a supervised binary classification problem for -`(src, dst)` node pairs that make up links in the graph, with positive examples -representing links that do exist in the graph, and negative examples representing -links that don't. - -In this example, we learn to predict citation links between papers in a Cora dataset (see below). - -## Requirements -This example assumes the `stellargraph` library and its requirements have been -installed by following the installation instructions in the README -of the library's [root directory](https://github.com/stellargraph/stellargraph). - -## CORA dataset - -Currently this example is tested on the CORA dataset. The GraphSAGE model assumes that node -features are available. - -## Running the notebook -The narrated version of this example is available in the `cora-links-example.ipynb` notebook. -To run the notebook: - - Activate the python 3.6 environment in which the -`stellargraph` library is installed - - Start `jupyter-notebook` - - note: you may need to first install `jupyter` by running `pip install jupyter` in your python environment - - Navigate to the notebook (`/demos/link-prediction/graphsage/cora-links-example.ipynb`), and click on - it to launch the notebook. - -## References - -[1] W. L. Hamilton, R. Ying, and J. Leskovec, “Inductive representation learning on large graphs,” presented at NIPS 2017 -([arXiv:1706.02216](https://arxiv.org/abs/1706.02216)). diff --git a/demos/link-prediction/hinsage/movielens-recommender.ipynb b/demos/link-prediction/hinsage-link-prediction.ipynb similarity index 100% rename from demos/link-prediction/hinsage/movielens-recommender.ipynb rename to demos/link-prediction/hinsage-link-prediction.ipynb diff --git a/demos/link-prediction/hinsage/README.md b/demos/link-prediction/hinsage/README.md deleted file mode 100644 index 1e505f35a..000000000 --- a/demos/link-prediction/hinsage/README.md +++ /dev/null @@ -1,43 +0,0 @@ -# Hinsage Recommender -- Movielens Example - -This is an example of using Heterogeneous GraphSAGE [1] (HinSAGE) as a hybrid recommender -system, predicting user-movie ratings for the Movielens dataset. - -## Requirements -This example assumes the `stellargraph` library and its requirements have been -installed by following the installation instructions in the README -of the library's [root directory](https://github.com/stellargraph/stellargraph). - -## MovieLens Data - -The MovieLens data contains a bipartite graph of Movies and Users, and edges -between them denoting reviews with scores ranging from 1 to 5. - -### Getting the data - -The data for this example is the MovieLens dataset of movie ratings -collected from the MovieLens web site (http://movielens.org). -The dataset of 100,000 ratings from 943 users on 1682 movies -can be downloaded from [this link](https://grouplens.org/datasets/movielens/100k/). - -To run the examples, extract the data into a directory, -and adjust the command line below to have `--data_path` pointing -to the data directory. - -## Running the notebook -The narrated version of this example is available in the `movielens-recommender.ipynb` notebook. -To run through the notebook, you need to launch jupyter notebook: - - Activate the python 3.6 environment in which the -`stellargraph` library is installed - - Run the following command `jupyter-notebook`, and note the ip address and port - number at which is it listening (normally it should be http://127.0.0.1:8888/) - - note: you may need to first install `jupyter` by running `pip install jupyter` in your python environment - - Copy-paste the ip address obtained in the previous step into your browser. You should see - a directory structure of the `stellargraph` library. - - Navigate to `/demos/link-prediction-hinsage/movielens-recommender.ipynb`, and click on - it to launch the notebook. - -## References - -[1] W. L. Hamilton, R. Ying, and J. Leskovec, “Inductive representation learning on large graphs,” presented at NIPS 2017 -([arXiv:1706.02216](https://arxiv.org/abs/1706.02216)). diff --git a/demos/link-prediction/random-walks/cora-lp-demo.ipynb b/demos/link-prediction/node2vec-link-prediction.ipynb similarity index 100% rename from demos/link-prediction/random-walks/cora-lp-demo.ipynb rename to demos/link-prediction/node2vec-link-prediction.ipynb diff --git a/demos/link-prediction/random-walks/README.md b/demos/link-prediction/random-walks/README.md deleted file mode 100644 index 533dc4d70..000000000 --- a/demos/link-prediction/random-walks/README.md +++ /dev/null @@ -1,126 +0,0 @@ -# Link Prediction demo - -The notebook `cora-lp-demo.ipynb` demonstrates how to predict citation links/edges between papers in the homogeneous CORA dataset using the random walk-based representation learning method Node2Vec. - -The main.py script runs link prediction on a homogeneous or heterogeneous graph. When -the graph is heterogeneous, it can optionally be treated as homogeneous for representation learning; in -this case, the link prediction script can be thought of as a baseline for more advanced -algorithms that do not simplify the input graph. - -In addition, for heterogeneous graphs, the link prediction script gives the user some control over what edge -types to predict including a choice of filtering these edges by one of their attributes. Currently, the script only -allows filtering by a date attribute in the format **dd/mm/yyyy**, e.g., *10/10/2005*. The edge attribute holding the date -can be given any text label in the graph, e.g., 'date', 'timestamp', 'start date', etc. - -For example, given a heterogeneous network with nodes representing **people** and **products**, and links connecting people with products -(**purchased**) and people with people (**friend**), then a user can ask that links of type **friend** be predicted. In addition, -if links of type **friend** have a **date** property, for example, in the range *01/01/2000* to *01/01/2010*, then a user -can ask that links to be predicted should occur after *01/01/2005*. That is link data with a date before *01/01/2005* are -used for training, and data after that same date are put aside for predicting/testing. - - -## Requirements -This example assumes the `stellargraph` library and its requirements have been -installed by following the installation instructions in the README -of the library's [root directory](https://github.com/stellargraph/stellargraph). - -### Usage - -#### Command Line Arguments -The script accepts the following command line arguments: - -- `input_graph ` The directory where the graph is stored, either as an edge list or a pickled networkx object. -- `output_node_features ` The file where the node features from representation learning are written -for future reference. -- `subsample` If specified, the graph is subsampled (number of nodes reduced) by a default 0.1 factor, e.g, -10 percent of the original graph. This option is useful for speeding up testing on large graphs. -- `subgraph_size ` Valid values are in the interval (0, 1]. It reduces the graph size by the given factor. -Size reduction is performed by reducing the number of nodes in the graph by the given factor and removing all other -nodes and edges connecting those nodes. -- `sampling_method ` Valid values are 'local' and 'global'. Specifies how pairs of nodes that are not connected are -selected as negative edge samples. The 'global' method, selects pairs of nodes uniformly at random from all nodes in -the graph that are not connected by an edge. The 'local' methods first samples a distance (number of edges) from a -source node (selected uniformly at random from all nodes int he graph) and then selects the first node at this distance -as the target node for the negative edge sample. The distance is sampled based on a probability distribution that can -be specified using the probs command line parameter. -- `sampling_probs ` The probability distribution for sampling distances between -source and target nodes. The first value should always be 0.0 and the remaining values should sum to one. An example for -sampling target nodes up to 4 edges away from source is `"0.0, 0.25, 0.25, 0.5"`. -- `p ` If specified, it indicates the number of positive and negative edges to be used for training -the link prediction classifier. The value indicates a percentage with respect to the relevant number of -edges in the input graph. The default value is 0.1 and valid values are in the range (0,1). -- `hin` If specified, it indicates that the input graph is heterogeneous. If not specified, a heterogeneous graph is -simplified to homogeneous and the options `edge_type`, `edge_attribute_label`, `edge_attribute_threshold`, and -`attribute_is_datetime` are ignored even if given. -- `metapaths ` For heterogeneous graphs (must specify `hin` option), this option can be used to specify the -metapaths for the random walks. A metapath is a `,` separated list of node labels; more than one metapaths can -be specified separated by a `;`. An example specifying 2 metapaths assuming node labels `author, paper, venue` is -`"author, paper, author; author, paper, venue, paper, author"`. -- `edge_type ` For heterogeneous graphs, this option is used to specify the type of edge (by its label) to -predict. -- `edge_attribute_label ` For heterogeneous graphs, this option is used to specify the edges that should be -predicted based on an attribute; the only valid attribute is a date in the format dd/mm/yyyy, e.g., 10/2/2018. This -option should be used together with `edge_type`. -- `attribute_is_datetime` If specified together with `edge_attribute_label` it indicates that the type of attribute -to use for selecting edges to predict is a date with format dd/mm/yyyy. Currently, only date attributes are allowed so -this flag should always specified together with `edge_attribute_label`. Later implementations will support numeric -edge attributes in additions to dates. -- `edge_attribute_threshold ` For heterogeneous graphs and used together with `edge_attribute_label` it specifies -a value (date as only dates are currently supported) for edges to predict. -- `show_hist` If this flag is specified, then a histogram of the distances between source and target nodes comprising -negative edge samples is plotted. - -#### Examples - -For the examples we use 2 different datasets. The **Cora** dataset that is a homogeneous network and the -**BlogCatalog3** dataset that is a heterogeneous network. - -**Cora** can be downloaded from [here:](https://linqs-data.soe.ucsc.edu/public/lbc/cora.tgz) - -``` -from stellargraph.datasets import Cora -Cora().download() -``` - -**BlogCatalog3** can be downloaded from [here.]( http://socialcomputing.asu.edu/datasets/BlogCatalog3) - -The **BlogCatalog3** dataset must be loaded into a `networkx` graph object. The `stellargraph` library provides a -utility method, `stellargraph.datasets.BlogCatalog3.load()`, that loads the dataset, -and returns a `StellarGraph` graph object. The following 3 lines of code will prepare the dataset for use in the below examples. - -``` -import networkx as nx -import os -from stellargraph.datasets import BlogCatalog3 -g = BlogCatalog3().load() -nx.write_gpickle(g.to_networkx(), os.path.expanduser('~/data/BlogCatalog3.gpickle')) -``` - - -**Example 1: Homogeneous graph with global sampling method for negative example** -``` -python main.py --input_graph=~/stellargraph-datasets/cora/cora.cites --output_node_features=~/data/cora.emb --sampling_method='global' -``` - -**Example 2: Homogeneous graph with local sampling method for negative examples** -``` -python main.py --input_graph=~/stellargraph-datasets/cora/cora.cites --output_node_features=~/data/cora.emb --sampling_method='local' --sampling_probs="0.0, 0.0, 0.0, 0.5, 0.5" -``` - -**Example 3: Heterogeneous graph treated as homogeneous** -``` -python main.py --input_graph=~/data/BlogCatalog3.gpickle --output_node_features=~/data/bc3.emb --sampling_method='global' -``` - -**Example 4: Heterogeneous graph predicting edges based on edge type** -``` -python main.py --hin --input_graph=~/data/BlogCatalog3.gpickle --output_node_features=~/data/bc3.emb --edge_type="friend" --sampling_method='global' -``` - -### References - -1. Node2Vec: Scalable Feature Learning for Networks. A. Grover, J. Leskovec. ACM SIGKDD International Conference on Knowledge Discovery and Data Mining (KDD), 2016. - -2. Metapath2Vec: Scalable Representation Learning for Heterogeneous Networks. Yuxiao Dong, Nitesh V. Chawla, and Ananthram Swami. ACM SIGKDD International Conference on Knowledge Discovery and Data Mining (KDD), 135–144, 2017 - -3. Social Computing Data Repository at ASU [http://socialcomputing.asu.edu]. R. Zafarani and H. Liu, (2009). Tempe, AZ: Arizona State University, School of Computing, Informatics and Decision Systems Engineering. diff --git a/demos/link-prediction/random-walks/main.py b/demos/link-prediction/random-walks/main.py deleted file mode 100644 index 5177b08f7..000000000 --- a/demos/link-prediction/random-walks/main.py +++ /dev/null @@ -1,254 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright 2017-2020 Data61, CSIRO -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import matplotlib.pyplot as plt -from math import isclose -import os -import networkx as nx -import numpy as np -from stellargraph.data import EdgeSplitter -from stellargraph import StellarGraph -from utils.cl_arguments_parser import parse_args -from utils.read_graph import read_graph -from utils.predictors import * -from collections import Counter -import multiprocessing - - -# Default parameters for Node2Vec -parameters = { - "p": 1.0, # Parameter p - "q": 1.0, # Parameter q - "dimensions": 128, # dimensionality of node2vec embeddings - "num_walks": 10, # Number of walks from each node - "walk_length": 80, # Walk length - "window_size": 10, # Context size for word2vec - "iter": 1, # number of SGD iterations (epochs) - "workers": multiprocessing.cpu_count(), # number of workers for word2vec - "weighted": False, # is graph weighted? - "directed": False, # are edges directed? -} - - -def print_distance_probabilities(node_distances): - counts = Counter(node_distances) - d_total = sum(counts.values()) - counts_normalized = {k: v / d_total for k, v in counts.items()} - counts_normalized = sorted(counts_normalized.items(), key=lambda x: x[0]) - counts = [v for k, v in counts_normalized] - print( - "Normalized distances between source and target nodes in negative samples: {}".format( - counts - ) - ) - - -def get_metapaths_from_str(metapaths_str): - """ - Metapaths are given as a string with the following format "p, v, p; a, p, v, p, a" where two metapaths - are given separated by ; and each metapath consists of node labels (treated as string) separated by commas. - Args: - metapaths_str: Metapaths in string format - - Returns: A list of list of node labels where each list specifies a metapath. - - """ - if len(metapaths_str) == 0: - metapaths = [ - ["group", "user", "group"], - ["user", "group", "user"], - ["user", "group", "user", "user"], - ["user", "user"], - ] - else: - metapaths = [] - m_tokens = metapaths_str.split(";") - - for metapath in m_tokens: - metapaths.append(list(metapath.split(","))) - - return metapaths - - -if __name__ == "__main__": - args = parse_args() - - p = float(args.p) - if p <= 0 or p >= 1: - print("** Invalid value: p should be in the interval (0, 1) **") - exit(0) - - subgraph_size = float(args.subgraph_size) - if subgraph_size <= 0 or subgraph_size > 1: - print("** Invalid value: subgraph_size should be in the interval (0, 1] **") - exit(0) - - print("Negative edges sampling method is set to {}.".format(args.sampling_method)) - sampling_probs = np.array([float(n) for n in args.sampling_probs.split(",")]) - if not isclose(sum(sampling_probs), 1.0): - print( - "WARNING: Negative edge distance sampling probabilities do not sum to 1.0. They will be normalized to continue." - ) - sampling_probs = sampling_probs / np.sum( - sampling_probs - ) # make sure that the probabilities sum to 1.0 - print(" Normalized Sampling Probabilities: {}".format(sampling_probs)) - - graph_filename = os.path.expanduser(args.input_graph) - dataset_name = args.dataset_name - # Load the graph from disk - g_nx = read_graph( - graph_file=graph_filename, - dataset_name=dataset_name, - is_directed=parameters["directed"], - is_weighted=parameters["weighted"], - ) - - if args.subsample_graph: - # subsample g_nx - nodes = g_nx.nodes(data=False) - np.random.shuffle(nodes) - subgraph_num_nodes = int(len(nodes) * subgraph_size) - g_nx = g_nx.subgraph(nodes[0:subgraph_num_nodes]) - - # Check if graph is connected; if not, then select the largest subgraph to continue - if nx.is_connected(g_nx): - print("Graph is connected") - else: - print("Graph is not connected") - # take the largest connected component as the data - g_nx_ccs = (g_nx.subgraph(c).copy() for c in nx.connected_components(g_nx)) - g_nx = max(g_nx_ccs, key=len) - print( - "Largest subgraph statistics: {} nodes, {} edges".format( - g_nx.number_of_nodes(), g_nx.number_of_edges() - ) - ) - - # From the original graph, extract E_test and G_test - edge_splitter_test = EdgeSplitter(g_nx) - if args.hin: - ( - g_test, - edge_data_ids_test, - edge_data_labels_test, - ) = edge_splitter_test.train_test_split( - p=p, - edge_label=args.edge_type, - edge_attribute_label=args.edge_attribute_label, - edge_attribute_threshold=args.edge_attribute_threshold, - attribute_is_datetime=args.attribute_is_datetime, - method=args.sampling_method, - probs=sampling_probs, - ) - else: - ( - g_test, - edge_data_ids_test, - edge_data_labels_test, - ) = edge_splitter_test.train_test_split( - p=p, method=args.sampling_method, probs=sampling_probs - ) - if args.show_histograms: - if args.sampling_method == "local": - bins = np.arange(1, len(sampling_probs) + 2) - else: - bins = np.arange( - 1, np.max(edge_splitter_test.negative_edge_node_distances) + 2 - ) - - plt.hist( - edge_splitter_test.negative_edge_node_distances, - bins=bins, - rwidth=0.5, - align="left", - ) - plt.show() - - if args.sampling_method == "local": - print_distance_probabilities(edge_splitter_test.negative_edge_node_distances) - - edge_splitter_train = EdgeSplitter(g_test, g_nx) - if args.hin: - ( - g_train, - edge_data_ids_train, - edge_data_labels_train, - ) = edge_splitter_train.train_test_split( - p=p, - edge_label=args.edge_type, - edge_attribute_label=args.edge_attribute_label, - edge_attribute_threshold=args.edge_attribute_threshold, - attribute_is_datetime=args.attribute_is_datetime, - method=args.sampling_method, - probs=sampling_probs, - ) - else: - ( - g_train, - edge_data_ids_train, - edge_data_labels_train, - ) = edge_splitter_train.train_test_split( - p=p, method=args.sampling_method, probs=sampling_probs - ) - if args.show_histograms: - if args.sampling_method == "local": - bins = np.arange(1, len(sampling_probs) + 2) - else: - bins = np.arange( - 1, np.max(edge_splitter_train.negative_edge_node_distances) + 2 - ) - plt.hist( - edge_splitter_train.negative_edge_node_distances, - bins=bins, - rwidth=0.5, - align="left", - ) - plt.show() - - if args.sampling_method == "local": - print_distance_probabilities(edge_splitter_train.negative_edge_node_distances) - - # this is so that Node2Vec works because it expects Graph not MultiGraph type - g_test = nx.Graph(g_test) - g_train = nx.Graph(g_train) - - if args.hin: - # prepare the metapaths if given in the command line - metapaths = get_metapaths_from_str(args.metapaths) - - train_heterogeneous_graph( - g_train=StellarGraph.from_networkx(g_train), - g_test=StellarGraph.from_networkx(g_test), - output_node_features=args.output_node_features, - edge_data_ids_train=edge_data_ids_train, - edge_data_labels_train=edge_data_labels_train, - edge_data_ids_test=edge_data_ids_test, - edge_data_labels_test=edge_data_labels_test, - metapaths=metapaths, - parameters=parameters, - ) - else: - train_homogeneous_graph( - g_train=g_train, - g_test=g_test, - output_node_features=args.output_node_features, - edge_data_ids_train=edge_data_ids_train, - edge_data_labels_train=edge_data_labels_train, - edge_data_ids_test=edge_data_ids_test, - edge_data_labels_test=edge_data_labels_test, - parameters=parameters, - ) diff --git a/demos/link-prediction/random-walks/utils/__init__.py b/demos/link-prediction/random-walks/utils/__init__.py deleted file mode 100644 index 4fbee4ac1..000000000 --- a/demos/link-prediction/random-walks/utils/__init__.py +++ /dev/null @@ -1,37 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright 2018-2020 Data61, CSIRO -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# -------------------------------------- -# Simple utilities -# -------------------------------------- -from datetime import datetime - - -def url_join(path1, path2, trailing_slash=False): - url = path1.rstrip("/") + "/" + path2.lstrip("/") - url += "/" if trailing_slash else "" - return url - - -def datetime_to_tuple(dt): - return (dt.year, dt.month, dt.day, dt.hour, dt.minute, dt.second, dt.microsecond) - - -def tuple_to_datetime(dt_list): - if isinstance(dt_list, (list, tuple)): - return datetime(*dt_list) - else: - return datetime.today() diff --git a/demos/link-prediction/random-walks/utils/cl_arguments_parser.py b/demos/link-prediction/random-walks/utils/cl_arguments_parser.py deleted file mode 100644 index 7bcd4d537..000000000 --- a/demos/link-prediction/random-walks/utils/cl_arguments_parser.py +++ /dev/null @@ -1,134 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright 2017-2020 Data61, CSIRO -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import argparse - - -def parse_args(): - """ - Parses the command line arguments. - - Returns: - """ - parser = argparse.ArgumentParser( - description="Run link prediction on homogeneous and heterogeneous graphs." - ) - - parser.add_argument( - "--dataset_name", - nargs="?", - default="cora", - help="The dataset name as stored in graphs.json", - ) - - parser.add_argument( - "--metapaths", - nargs="?", - default="", - help="The metapaths to use for random walks in the metapath2vec algorithm on heterogeneous networks", - ) - - parser.add_argument( - "--p", - nargs="?", - default=0.1, - help="Percent of edges to sample for positive and negative examples (valid values 0 < p < 1)", - ) - - parser.add_argument( - "--subgraph_size", - nargs="?", - default=0.1, - help="Percent of nodes for a subgraph of the input data when --subsample is specified (valid values 0 < subgraph_size < 1)", - ) - - parser.add_argument( - "--edge_type", nargs="?", default="friend", help="The edge type to predict" - ) - - parser.add_argument( - "--edge_attribute_label", - nargs="?", - default="date", - help="The attribute label by which to split edges", - ) - - parser.add_argument( - "--edge_attribute_threshold", - nargs="?", - default=None, - help="Any edge with attribute value less that the threshold cannot be removed from graph", - ) - - parser.add_argument( - "--attribute_is_datetime", - dest="attribute_is_datetime", - action="store_true", - help="If specified, the edge attribute to split on is considered datetime in format dd/mm/yyyy", - ) - - parser.add_argument( - "--hin", - dest="hin", - action="store_true", - help="If specified, it indicates that the input graph in a heterogenous network; otherwise, the input graph is assumed homogeneous", - ) - - parser.add_argument( - "--input_graph", - nargs="?", - default="~/Projects/data/cora/cora.epgm/", - help="Input graph filename", - ) - - parser.add_argument( - "--output_node_features", - nargs="?", - default="~/Projects/data/cora/cora.features/cora.emb", - help="Input graph filename", - ) - - parser.add_argument( - "--sampling_method", - nargs="?", - default="global", - help="Negative edge sampling method: local or global", - ) - - parser.add_argument( - "--sampling_probs", - nargs="?", - default="0.0, 0.25, 0.50, 0.25", - help="Negative edge sample probabilities (for local sampling method) with respect to distance from starting node", - ) - - parser.add_argument( - "--show_hist", - dest="show_histograms", - action="store_true", - help="If specified, a histogram of the distances between source and target nodes for \ - negative edge samples will be plotted.", - ) - - parser.add_argument( - "--subsample", - dest="subsample_graph", - action="store_true", - help="If specified, then the original graph is randomly subsampled to 10% of the original size, \ - with respect to the number of nodes", - ) - - return parser.parse_args() diff --git a/demos/link-prediction/random-walks/utils/metapath2vec_feature_learning.py b/demos/link-prediction/random-walks/utils/metapath2vec_feature_learning.py deleted file mode 100644 index 54799a76d..000000000 --- a/demos/link-prediction/random-walks/utils/metapath2vec_feature_learning.py +++ /dev/null @@ -1,186 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright 2017-2020 Data61, CSIRO -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import numpy as np -from gensim.models import Word2Vec -import time -import pandas as pd -from stellargraph.data import UniformRandomMetaPathWalk - - -class Metapath2VecFeatureLearning(object): - def __init__(self, nxG=None, embeddings_filename=r"metapath2vec_model.emb"): - self.nxG = nxG - self.G = None - self.model = None - self.embeddings_filename = embeddings_filename - - # - # learn_embeddings() and fit() are based on the learn_embeddings() and main() functions in main.py of the - # reference implementation of Node2Vec. - # - def learn_embeddings(self, walks, d, k): - """ - Learn embeddings by optimizing the Skipgram objective using SGD. - - Args: - walks: - d: - k: - - Returns: - - """ - time_b = time.time() - walks = [list(map(str, walk)) for walk in walks] - self.model = Word2Vec( - walks, size=d, window=k, min_count=0, sg=1, workers=2, iter=1 - ) - self.model.wv.save_word2vec_format(self.embeddings_filename) - print( - "({}) Time to learn embeddings {:.0f} seconds".format( - type(self).__name__, time.time() - time_b - ) - ) - - def _assert_positive_int(self, val, msg=""): - """ - Raises ValueError exception if val is not a positive integer. - - Args: - val: The value to check - msg: The message to return with the exception - - Returns: - - """ - if val <= 0 or not isinstance(val, int): - raise ValueError(msg) - - def _assert_positive(self, val, msg=""): - """ - Raises ValueError exception if val is not a positive number. - - Args: - val: The value to check - msg: The message to return with the exception - - Returns: - - """ - if val <= 0: - raise ValueError(msg) - - def fit(self, metapaths=None, d=128, r=10, l=80, k=10): - """ - Pipeline for representational learning for all nodes in a graph. - - :param k: - :return: - """ - self._assert_positive_int(d, msg="d should be positive integer") - self._assert_positive_int(r, msg="r should be positive integer") - self._assert_positive_int(l, msg="l should be positive integer") - self._assert_positive_int(k, msg="k should be positive integer") - - start_time_fit = time.time() - # self.G = node2vec.Graph(self.nxG, False, p, q) - # self.G.preprocess_transition_probs() - metapath_walker = UniformRandomMetaPathWalk(self.nxG) - # walks = self.G.simulate_walks(r, l) - time_b = time.time() - walks = metapath_walker.run( - nodes=list(self.nxG.nodes()), - metapaths=metapaths, - length=l, - n=r, - node_type_attribute="label", - seed=None, - ) - print( - "({}) Time for random walks {:.0f} seconds.".format( - type(self).__name__, time.time() - time_b - ) - ) - self.learn_embeddings(walks, d, k) - print("Total time for fit() was {:.0f}".format(time.time() - start_time_fit)) - - def from_file(self, filename): - """ - Helper function for loading a node2vec model from disk so that I can run experiments fast without having to - wait for node2vec to finish. - - :param filename: The filename storing the model - :return: None - """ - self.model = pd.read_csv(filename, delimiter=" ", skiprows=1, header=None) - self.model.iloc[:, 0] = self.model.iloc[:, 0].astype( - str - ) # this is so that indexing works the same as having - # trained the model with self.fit() - self.model.index = self.model.iloc[:, 0] - self.model = self.model.drop([0], 1) - print(self.model.head(2)) - - def select_operator_from_str(self, binary_operator): - if binary_operator == "l1": - return self.operator_l1 - elif binary_operator == "l2": - return self.operator_l2 - elif binary_operator == "avg": - return self.operator_avg - elif binary_operator == "h": # hadamard - return self.operator_hadamard - else: - raise ValueError("Invalid binary operator {}".format(binary_operator)) - - def operator_hadamard(self, u, v): - return u * v - - def operator_avg(self, u, v): - return (u + v) / 2.0 - - def operator_l2(self, u, v): - return (u - v) ** 2 - - def operator_l1(self, u, v): - return np.abs(u - v) - - def transform(self, edge_data, binary_operator="h"): - """ - It calculates edge features for the given binary operator applied to the node features in data_edge - - :param edge_data: (2-tuple) It is a list of pairs of nodes that make an edge in the graph - :param binary_operator: The binary operator to apply to the node features to calculate an edge feature - :return: Features in X (Nxd array where N is the number of edges and d is the dimensionality of the edge - features that is the same as the dimensionality of the node features) and edge labels in y (0 for no edge - and 1 for edge). - """ - X = [] # data matrix, each row is a d-dimensional feature of an edge - - func_bin_operator = self.select_operator_from_str(binary_operator) - - for ids in edge_data[0]: - u_str = str(ids[0]) - v_str = str(ids[1]) - if type(self.model) is Word2Vec: - X.append(func_bin_operator(self.model[u_str], self.model[v_str])) - else: # Pandas Dataframe - X.append( - func_bin_operator(self.model.loc[u_str], self.model.loc[v_str]) - ) - - return np.array(X), edge_data[1] diff --git a/demos/link-prediction/random-walks/utils/node2vec/LICENSE.md b/demos/link-prediction/random-walks/utils/node2vec/LICENSE.md deleted file mode 100644 index af4a91f64..000000000 --- a/demos/link-prediction/random-walks/utils/node2vec/LICENSE.md +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2016 Aditya Grover - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. diff --git a/demos/link-prediction/random-walks/utils/node2vec/README.md b/demos/link-prediction/random-walks/utils/node2vec/README.md deleted file mode 100644 index 5450de3e4..000000000 --- a/demos/link-prediction/random-walks/utils/node2vec/README.md +++ /dev/null @@ -1,57 +0,0 @@ -The core repository for node2vec is cloned from https://github.com/aditya-grover/node2vec - -# node2vec - -This repository provides a reference implementation of *node2vec* as described in the paper:
-> node2vec: Scalable Feature Learning for Networks.
-> Aditya Grover and Jure Leskovec.
-> Knowledge Discovery and Data Mining, 2016.
-> - -The *node2vec* algorithm learns continuous representations for nodes in any (un)directed, (un)weighted graph. Please check the [project page](https://snap.stanford.edu/node2vec/) for more details. - -### Basic Usage - -#### Example -To run *node2vec* on Zachary's karate club network, execute the following command from the project home directory:
- ``python main.py --input graph/karate.edgelist --output emb/karate.emd`` - -#### Options -You can check out the other options available to use with *node2vec* using:
- ``python main.py --help`` - -#### Input -The supported input format is an edgelist: - - node1_id_int node2_id_int - -The graph is assumed to be undirected and unweighted by default. These options can be changed by setting the appropriate flags. - -#### Output -The output file has *n+1* lines for a graph with *n* vertices. -The first line has the following format: - - num_of_nodes dim_of_representation - -The next *n* lines are as follows: - - node_id dim1 dim2 ... dimd - -where dim1, ... , dimd is the *d*-dimensional representation learned by *node2vec*. - -### Citing -If you find *node2vec* useful for your research, please consider citing the following paper: - - @inproceedings{node2vec-kdd2016, - author = {Grover, Aditya and Leskovec, Jure}, - title = {node2vec: Scalable Feature Learning for Networks}, - booktitle = {Proceedings of the 22nd ACM SIGKDD International Conference on Knowledge Discovery and Data Mining}, - year = {2016} - } - - -### Miscellaneous - -Please send any questions you might have about the code and/or the algorithm to . - -*Note:* This is only a reference implementation of the *node2vec* algorithm and could benefit from several performance enhancement schemes, some of which are discussed in the paper. diff --git a/demos/link-prediction/random-walks/utils/node2vec/main.py b/demos/link-prediction/random-walks/utils/node2vec/main.py deleted file mode 100644 index 4fd59d856..000000000 --- a/demos/link-prediction/random-walks/utils/node2vec/main.py +++ /dev/null @@ -1,176 +0,0 @@ -""" -Reference implementation of node2vec. - -Author: Aditya Grover - -For more details, refer to the paper: -node2vec: Scalable Feature Learning for Networks -Aditya Grover and Jure Leskovec -Knowledge Discovery and Data Mining (KDD), 2016 -""" - -import argparse -import time -import numpy as np -import networkx as nx -import node2vec -from gensim.models import Word2Vec - - -def parse_args(): - """ - Parses the node2vec arguments. - """ - parser = argparse.ArgumentParser(description="Run node2vec.") - - parser.add_argument( - "--input", nargs="?", default="graph/karate.edgelist", help="Input graph path" - ) - - parser.add_argument( - "--output", nargs="?", default="emb/karate.emb", help="Embeddings path" - ) - - parser.add_argument( - "--dimensions", - type=int, - default=128, - help="Number of dimensions. Default is 128.", - ) - - parser.add_argument( - "--walk-length", - type=int, - default=80, - help="Length of walk per source. Default is 80.", - ) - - parser.add_argument( - "--num-walks", - type=int, - default=10, - help="Number of walks per source. Default is 10.", - ) - - parser.add_argument( - "--window-size", - type=int, - default=10, - help="Context size for optimization. Default is 10.", - ) - - parser.add_argument("--iter", default=1, type=int, help="Number of epochs in SGD") - - parser.add_argument( - "--workers", - type=int, - default=8, - help="Number of parallel workers. Default is 8.", - ) - - parser.add_argument( - "--p", type=float, default=1, help="Return hyperparameter. Default is 1." - ) - - parser.add_argument( - "--q", type=float, default=1, help="Inout hyperparameter. Default is 1." - ) - - parser.add_argument( - "--weighted", - dest="weighted", - action="store_true", - help="Boolean specifying (un)weighted. Default is unweighted.", - ) - parser.add_argument("--unweighted", dest="unweighted", action="store_false") - parser.set_defaults(weighted=False) - - parser.add_argument( - "--directed", - dest="directed", - action="store_true", - help="Graph is (un)directed. Default is undirected.", - ) - parser.add_argument("--undirected", dest="undirected", action="store_false") - parser.set_defaults(directed=False) - - return parser.parse_args() - - -def read_graph(): - """ - Reads the input network in networkx. - """ - if args.weighted: - G = nx.read_edgelist( - args.input, - nodetype=int, - data=(("weight", float),), - create_using=nx.DiGraph(), - ) - else: - G = nx.read_edgelist(args.input, nodetype=int, create_using=nx.DiGraph()) - for edge in G.edges(): - G[edge[0]][edge[1]]["weight"] = 1 - - if not args.directed: - G = G.to_undirected() - - return G - - -def learn_embeddings(walks): - """ - Learn embeddings by optimizing the Skipgram objective using SGD. - """ - walks = [list(map(str, walk)) for walk in walks] - model = Word2Vec( - walks, - size=args.dimensions, - window=args.window_size, - min_count=0, - sg=1, - workers=args.workers, - iter=args.iter, - ) - model.wv.save_word2vec_format(args.output) - - return - - -def main(args): - """ - Pipeline for representational learning for all nodes in a graph. - """ - print("Reading the graph...") - nx_G = read_graph() - print("Preprocessing the graph...") - G = node2vec.Graph(nx_G, args.directed, args.p, args.q) - G.preprocess_transition_probs() - print("Simulating random walks...") - startTime = time.time() - walks = G.simulate_walks(args.num_walks, args.walk_length) - endTime = time.time() - print( - "\n---- Random walks generation completed in " - + str(round(endTime - startTime, 3)) - + " seconds; average of " - + str(round((endTime - startTime) / args.num_walks, 3)) - + " seconds per set of walks\n" - ) - print("Learning node embedding function for {} SGD iterations...".format(args.iter)) - startTime = time.time() - learn_embeddings(walks) - endTime = time.time() - print( - "\n ---- Embedding learning completed in " - + str(round(endTime - startTime, 3)) - + " seconds; average of " - + str(round((endTime - startTime) / args.iter, 3)) - + " seconds per SGD iteration\n" - ) - - -if __name__ == "__main__": - args = parse_args() - main(args) diff --git a/demos/link-prediction/random-walks/utils/node2vec/node2vec.py b/demos/link-prediction/random-walks/utils/node2vec/node2vec.py deleted file mode 100644 index c3ddd5656..000000000 --- a/demos/link-prediction/random-walks/utils/node2vec/node2vec.py +++ /dev/null @@ -1,164 +0,0 @@ -import numpy as np -import networkx as nx -import random -import logging - -logger = logging.getLogger(__name__) - - -class Graph: - def __init__(self, nx_G, is_directed, p, q): - self.G = nx_G - self.is_directed = is_directed - self.p = p - self.q = q - - def node2vec_walk(self, walk_length, start_node): - """ - Simulate a random walk starting from start node. - """ - G = self.G - alias_nodes = self.alias_nodes - alias_edges = self.alias_edges - - walk = [start_node] - - while len(walk) < walk_length: - cur = walk[-1] - cur_nbrs = sorted(G.neighbors(cur)) - if len(cur_nbrs) > 0: - if len(walk) == 1: - walk.append( - cur_nbrs[alias_draw(alias_nodes[cur][0], alias_nodes[cur][1])] - ) - else: - prev = walk[-2] - next = cur_nbrs[ - alias_draw( - alias_edges[(prev, cur)][0], alias_edges[(prev, cur)][1] - ) - ] - walk.append(next) - else: - break - - return walk - - def simulate_walks(self, num_walks, walk_length): - """ - Repeatedly simulate random walks from each node. - """ - G = self.G - walks = [] - nodes = list(G.nodes()) - logger.info("Walk iteration:") - for walk_iter in range(num_walks): - logger.info(str(walk_iter + 1) + "/" + str(num_walks)) - random.shuffle(nodes) - for node in nodes: - walks.append( - self.node2vec_walk(walk_length=walk_length, start_node=node) - ) - - return walks - - def get_alias_edge(self, src, dst): - """ - Get the alias edge setup lists for a given edge. - """ - G = self.G - p = self.p - q = self.q - - unnormalized_probs = [] - for dst_nbr in sorted(G.neighbors(dst)): - if dst_nbr == src: - unnormalized_probs.append(G[dst][dst_nbr]["weight"] / p) - elif G.has_edge(dst_nbr, src): - unnormalized_probs.append(G[dst][dst_nbr]["weight"]) - else: - unnormalized_probs.append(G[dst][dst_nbr]["weight"] / q) - norm_const = sum(unnormalized_probs) - normalized_probs = [float(u_prob) / norm_const for u_prob in unnormalized_probs] - - return alias_setup(normalized_probs) - - def preprocess_transition_probs(self): - """ - Preprocessing of transition probabilities for guiding the random walks. - """ - G = self.G - is_directed = self.is_directed - - alias_nodes = {} - for node in G.nodes(): - unnormalized_probs = [ - G[node][nbr]["weight"] for nbr in sorted(G.neighbors(node)) - ] - norm_const = sum(unnormalized_probs) - normalized_probs = [ - float(u_prob) / norm_const for u_prob in unnormalized_probs - ] - alias_nodes[node] = alias_setup(normalized_probs) - - alias_edges = {} - triads = {} - - if is_directed: - for edge in G.edges(): - alias_edges[edge] = self.get_alias_edge(edge[0], edge[1]) - else: - for edge in G.edges(): - alias_edges[edge] = self.get_alias_edge(edge[0], edge[1]) - alias_edges[(edge[1], edge[0])] = self.get_alias_edge(edge[1], edge[0]) - - self.alias_nodes = alias_nodes - self.alias_edges = alias_edges - - return - - -def alias_setup(probs): - """ - Compute utility lists for non-uniform sampling from discrete distributions. - Refer to https://hips.seas.harvard.edu/blog/2013/03/03/the-alias-method-efficient-sampling-with-many-discrete-outcomes/ - for details - """ - K = len(probs) - q = np.zeros(K) - J = np.zeros(K, dtype=np.int) - - smaller = [] - larger = [] - for kk, prob in enumerate(probs): - q[kk] = K * prob - if q[kk] < 1.0: - smaller.append(kk) - else: - larger.append(kk) - - while len(smaller) > 0 and len(larger) > 0: - small = smaller.pop() - large = larger.pop() - - J[small] = large - q[large] = q[large] + q[small] - 1.0 - if q[large] < 1.0: - smaller.append(large) - else: - larger.append(large) - - return J, q - - -def alias_draw(J, q): - """ - Draw sample from a non-uniform discrete distribution using alias sampling. - """ - K = len(J) - - kk = int(np.floor(np.random.rand() * K)) - if np.random.rand() < q[kk]: - return kk - else: - return J[kk] diff --git a/demos/link-prediction/random-walks/utils/node2vec_feature_learning.py b/demos/link-prediction/random-walks/utils/node2vec_feature_learning.py deleted file mode 100644 index 5462be6b8..000000000 --- a/demos/link-prediction/random-walks/utils/node2vec_feature_learning.py +++ /dev/null @@ -1,173 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright 2017-2020 Data61, CSIRO -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import numpy as np -from utils.node2vec import node2vec -from gensim.models import Word2Vec -import time -import pandas as pd - - -class Node2VecFeatureLearning(object): - def __init__(self, nxG=None, embeddings_filename=r"..\data\model.emb"): - self.nxG = nxG - self.G = None - self.model = None - self.embeddings_filename = embeddings_filename - - # - # learn_embeddings() and fit() are based on the learn_embeddings() and main() functions in main.py of the - # reference implementation. - # - def learn_embeddings(self, walks, d, k): - """ - Learn embeddings by optimizing the Skipgram objective using SGD. - - :param walks: - :param d: - :param k: - :return: - """ - time_b = time.time() - walks = [list(map(str, walk)) for walk in walks] - self.model = Word2Vec( - walks, size=d, window=k, min_count=0, sg=1, workers=2, iter=1 - ) - self.model.wv.save_word2vec_format(self.embeddings_filename) - print( - "({}) Time for learning embeddings {:.0f} seconds.".format( - type(self).__name__, time.time() - time_b - ) - ) - - return - - def _assert_positive_int(self, val, msg=""): - """ - Raises ValueError exception if val is not a positive integer. - :param val: The value to check - :param msg: The message to return with the exception - """ - if val <= 0 or not isinstance(val, int): - raise ValueError(msg) - - def _assert_positive(self, val, msg=""): - """ - Raises ValueError exception if val is not a positive number. - :param val: The value to check - :param msg: The message to return with the exception - """ - if val <= 0: - raise ValueError(msg) - - def fit(self, p=1, q=1, d=128, r=10, l=80, k=10): - """ - Pipeline for representational learning for all nodes in a graph. - - :param p: - :param q: - :param d: - :param r: - :param l: - :param k: - :return: - """ - self._assert_positive(p, msg="p should be positive number") - self._assert_positive(q, msg="q should be positive number") - self._assert_positive_int(d, msg="d should be positive integer") - self._assert_positive_int(r, msg="r should be positive integer") - self._assert_positive_int(l, msg="l should be positive integer") - self._assert_positive_int(k, msg="k should be positive integer") - - start_time_fit = time.time() - self.G = node2vec.Graph(self.nxG, False, p, q) - self.G.preprocess_transition_probs() - time_b = time.time() - walks = self.G.simulate_walks(r, l) - print( - "({}) Time for random walks {:.0f} seconds".format( - type(self).__name__, time.time() - time_b - ) - ) - self.learn_embeddings(walks, d, k) - print("Total time for fit()", time.time() - start_time_fit, "seconds") - - def from_file(self, filename): - """ - Helper function for loading a node2vec model from disk so that I can run experiments fast without having to - wait for node2vec to finish. - - :param filename: The filename storing the model - :return: None - """ - self.model = pd.read_csv(filename, delimiter=" ", skiprows=1, header=None) - self.model.iloc[:, 0] = self.model.iloc[:, 0].astype( - str - ) # this is so that indexing works the same as having - # trained the model with self.fit() - self.model.index = self.model.iloc[:, 0] - self.model = self.model.drop([0], 1) - print(self.model.head(2)) - - def select_operator_from_str(self, binary_operator): - if binary_operator == "l1": - return self.operator_l1 - elif binary_operator == "l2": - return self.operator_l2 - elif binary_operator == "avg": - return self.operator_avg - elif binary_operator == "h": # hadamard - return self.operator_hadamard - else: - raise ValueError("Invalid binary operator {}".format(binary_operator)) - - def operator_hadamard(self, u, v): - return u * v - - def operator_avg(self, u, v): - return (u + v) / 2.0 - - def operator_l2(self, u, v): - return (u - v) ** 2 - - def operator_l1(self, u, v): - return np.abs(u - v) - - def transform(self, edge_data, binary_operator="h"): - """ - It calculates edge features for the given binary operator applied to the node features in data_edge - - :param edge_data: (2-tuple) It is a list of pairs of nodes that make an edge in the graph - :param binary_operator: The binary operator to apply to the node features to calculate an edge feature - :return: Features in X (Nxd array where N is the number of edges and d is the dimensionality of the edge - features that is the same as the dimensionality of the node features) and edge labels in y (0 for no edge - and 1 for edge). - """ - X = [] # data matrix, each row is a d-dimensional feature of an edge - - func_bin_operator = self.select_operator_from_str(binary_operator) - - for ids in edge_data[0]: - u_str = str(ids[0]) - v_str = str(ids[1]) - if type(self.model) is Word2Vec: - X.append(func_bin_operator(self.model[u_str], self.model[v_str])) - else: # Pandas Dataframe - X.append( - func_bin_operator(self.model.loc[u_str], self.model.loc[v_str]) - ) - - return np.array(X), edge_data[1] diff --git a/demos/link-prediction/random-walks/utils/predictors.py b/demos/link-prediction/random-walks/utils/predictors.py deleted file mode 100644 index 766018c68..000000000 --- a/demos/link-prediction/random-walks/utils/predictors.py +++ /dev/null @@ -1,360 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright 2017-2020 Data61, CSIRO -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -import os - -from utils.node2vec_feature_learning import Node2VecFeatureLearning -from utils.metapath2vec_feature_learning import Metapath2VecFeatureLearning - -from sklearn.pipeline import Pipeline -from sklearn.linear_model import LogisticRegressionCV -from sklearn.model_selection import train_test_split -from sklearn.metrics import roc_auc_score -from sklearn.preprocessing import StandardScaler - - -def link_prediction_clf(feature_learner, edge_data, binary_operators=None): - """ - Performs link prediction given that node features have already been computed. It uses the node features to - derive edge features using the operators given. Then it trains a Logistic Regression classifier to predict - links between nodes. - - Args: - feature_learner: Representation learning object. - edge_data: (2-tuple) Positive and negative edge data for training the classifier - binary_operators: Binary operators applied on node features to produce the corresponding edge feature. - - Returns: - Returns the ROCAUC score achieved by the classifier for each of the specified binary operators. - """ - scores = ( - [] - ) # the auc values for each binary operator (based on test set performance) - clf_best = None - score_best = 0 - op_best = "" - - if binary_operators is None: - print("WARNING: Using default binary operator 'h'") - binary_operators = ["h"] - - # for each type of binary operator - for binary_operator in binary_operators: - X, y = feature_learner.transform(edge_data, binary_operator) - # - # Split the data and keep X_test, y_test for scoring the model; setting the random_state to - # the same constant for every iteration gives the same split of data so the comparison is fair. - X_train, X_test, y_train, y_test = train_test_split( - X, y, train_size=0.75, test_size=0.25 - ) - # LogisticRegressionCV automatically tunes the parameter C using cross validation and the ROC AUC metric - clf = Pipeline( - steps=[ - ("sc", StandardScaler()), - ( - "clf", - LogisticRegressionCV( - Cs=10, cv=10, scoring="roc_auc", verbose=False, max_iter=500 - ), - ), - ] - ) - clf.fit(X_train, y_train) - - y_pred = clf.predict_proba(X_test) # predict on the test set - if clf.classes_[0] == 1: # only needs probabilities of positive class - score_auc = roc_auc_score(y_test, y_pred[:, 0]) - else: - score_auc = roc_auc_score(y_test, y_pred[:, 1]) - - if score_auc >= score_best: - score_best = score_auc - clf_best = clf - op_best = binary_operator - - print( - "Operator: {} Score (ROC AUC on test set of edge_data): {:.3f}".format( - binary_operator, score_auc - ) - ) - scores.append({"op": binary_operator, "score": score_auc}) - - return scores, clf_best, op_best - - -def predict_links(feature_learner, edge_data, clf, binary_operators=None): - """ - Given a node feature learner and a trained classifier, it computes edge features, uses the classifier to predict - the given edge data and calculate prediction accuracy. - :param feature_learner: - :param edge_data: - :param clf: - :param binary_operators: - :return: - """ - - if binary_operators is None: - print("WARNING: Using default binary operator 'h'") - binary_operators = ["h"] - - scores = ( - [] - ) # the auc values for each binary operator (based on test set performance) - - # for each type of binary operator - for binary_operator in binary_operators: - # Derive edge features from node features using the given binary operator - X, y = feature_learner.transform(edge_data, binary_operator) - # - y_pred = clf.predict_proba(X) # predict - if clf.classes_[0] == 1: # only needs probabilities of positive class - score_auc = roc_auc_score(y, y_pred[:, 0]) - else: - score_auc = roc_auc_score(y, y_pred[:, 1]) - - # print('Correct labels y {}'.format(y)) - # print('Predictions y_pred {}'.format(y_pred[:, 1])) - print("Prediction score (ROC AUC):", score_auc) - scores.append({"op": binary_operator, "score": score_auc}) - - return scores - - -def predict(feature_learner, edge_data, clf, binary_operators=None): - """ - Given a node feature learner and a trained classifier, it computes edge features, uses the classifier to predict - the given edge data and calculate prediction accuracy. - :param feature_learner: - :param edge_data: - :param clf: - :param binary_operators: - :return: a prediction probability for each binary operator in a dictionary where operator is key and prediction is - the value. - """ - - if binary_operators is None: - print("WARNING: Using default binary operator 'h'") - binary_operators = ["h"] - - predictions = {} - # for each type of binary operator - for binary_operator in binary_operators: - # Derive edge features from node features using the given binary operator - X, y = feature_learner.transform(edge_data, binary_operator) - # - y_pred = clf.predict_proba(X) # predict - - predictions[binary_operator] = y_pred - - return predictions - - -def train_homogeneous_graph( - g_train, - g_test, - output_node_features, # filename for writing node embeddings - edge_data_ids_train, - edge_data_labels_train, # train edge data - edge_data_ids_test, - edge_data_labels_test, # test edge data - parameters, -): - # Using g_train and edge_data_train train a classifier for edge prediction - feature_learner_train = Node2VecFeatureLearning( - g_train, embeddings_filename=os.path.expanduser(output_node_features) - ) - print( - "Learning {}-dimensional node features (embeddings) from g_train using node2vec algorithm with the following parameters:".format( - parameters["dimensions"] - ) - ) - print("\tp = {}, q = {}".format(parameters["p"], parameters["q"])) - print( - "\tnum_walks = {}, walk length = {}, context window size = {}".format( - parameters["num_walks"], - parameters["walk_length"], - parameters["window_size"], - ) - ) - feature_learner_train.fit( - p=parameters["p"], - q=parameters["q"], - d=parameters["dimensions"], - r=parameters["num_walks"], - l=parameters["walk_length"], - k=parameters["window_size"], - ) - # Train the classifier - binary_operators = ["h", "avg", "l1", "l2"] - print( - "Training binary link classifiers (link predictors) using the following binary operators: {}".format( - binary_operators - ) - ) - scores_train, clf_edge, binary_operator = link_prediction_clf( - feature_learner=feature_learner_train, - edge_data=(edge_data_ids_train, edge_data_labels_train), - binary_operators=binary_operators, - ) - - # Do representation learning on g_test and use the previously trained classifier on g_train to predict - # edge_data_test - feature_learner_test = Node2VecFeatureLearning( - g_test, embeddings_filename=os.path.expanduser(output_node_features) - ) - print( - "Learning {}-dimensional node features (embeddings) from g_test using node2vec algorithm with the following parameters:".format( - parameters["dimensions"] - ) - ) - print("\tp = {}, q = {}".format(parameters["p"], parameters["q"])) - print( - "\tnum_walks = {}, walk length = {}, context window size = {}".format( - parameters["num_walks"], - parameters["walk_length"], - parameters["window_size"], - ) - ) - feature_learner_test.fit( - p=parameters["p"], - q=parameters["q"], - d=parameters["dimensions"], - r=parameters["num_walks"], - l=parameters["walk_length"], - k=parameters["window_size"], - ) - print( - "Evaluating best link predictor with {} binary operator on test links in g_test".format( - binary_operator - ) - ) - scores = predict_links( - feature_learner=feature_learner_test, - edge_data=(edge_data_ids_test, edge_data_labels_test), - clf=clf_edge, - binary_operators=[binary_operator], - ) - - print("\n **** Scores on test set of links ****\n") - for score in scores: - print( - " Operator: {} Score (ROC AUC): {:.2f}".format( - score["op"], score["score"] - ) - ) - print("\n ****************************") - - return feature_learner_train, feature_learner_test, clf_edge - - -def train_heterogeneous_graph( - g_train, - g_test, - output_node_features, # filename for writing node embeddings - edge_data_ids_train, - edge_data_labels_train, # train edge data - edge_data_ids_test, - edge_data_labels_test, # test edge data - metapaths, - parameters, -): - # metapaths = [["Person", "Group", "Person"], ["Person", "Group", "Person", "Person"]] - - # Using g_train and edge_data_train train a classifier for edge prediction - feature_learner_train = Metapath2VecFeatureLearning( - g_train, embeddings_filename=os.path.expanduser(output_node_features) - ) - print( - "Learning {}-dimensional node features (embeddings) from g_train using metapath2vec algorithm with the following parameters:".format( - parameters["dimensions"] - ) - ) - print("metapaths: {}".format(metapaths)) - print( - "\tnum_walks = {}, walk length = {}, context window size = {}".format( - parameters["num_walks"], - parameters["walk_length"], - parameters["window_size"], - ) - ) - feature_learner_train.fit( - metapaths=metapaths, - d=parameters["dimensions"], - r=parameters["num_walks"], - l=parameters["walk_length"], - k=parameters["window_size"], - ) - # Train the classifier - binary_operators = ["h", "avg", "l1", "l2"] - print( - "Training binary link classifiers (link predictors) using the following binary operators: {}".format( - binary_operators - ) - ) - scores_train, clf_edge, binary_operator = link_prediction_clf( - feature_learner=feature_learner_train, - edge_data=(edge_data_ids_train, edge_data_labels_train), - binary_operators=binary_operators, - ) - - # Do representation learning on g_test and use the previously trained classifier on g_train to predict - # edge_data_test - feature_learner_test = Metapath2VecFeatureLearning( - g_test, embeddings_filename=os.path.expanduser(output_node_features) - ) - print( - "Learning {}-dimensional node features (embeddings) from g_test using metapath2vec algorithm with the following parameters:".format( - parameters["dimensions"] - ) - ) - print("metapaths: {}".format(metapaths)) - print( - "\tnum_walks = {}, walk length = {}, context window size = {}".format( - parameters["num_walks"], - parameters["walk_length"], - parameters["window_size"], - ) - ) - feature_learner_test.fit( - metapaths=metapaths, - d=parameters["dimensions"], - r=parameters["num_walks"], - l=parameters["walk_length"], - k=parameters["window_size"], - ) - - print( - "Evaluating best link predictor with {} binary operator on test links in g_test".format( - binary_operator - ) - ) - - scores = predict_links( - feature_learner=feature_learner_test, - edge_data=(edge_data_ids_test, edge_data_labels_test), - clf=clf_edge, - binary_operators=[binary_operator], - ) - - print("\n **** Scores on test set of links (HIN) ****\n") - for score in scores: - print( - " Operator: {} Score (ROC AUC): {:.2f}".format( - score["op"], score["score"] - ) - ) - print("\n ****************************") - - return feature_learner_train, feature_learner_test, clf_edge diff --git a/demos/link-prediction/random-walks/utils/read_graph.py b/demos/link-prediction/random-walks/utils/read_graph.py deleted file mode 100644 index b11bab2f8..000000000 --- a/demos/link-prediction/random-walks/utils/read_graph.py +++ /dev/null @@ -1,87 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright 2017-2020 Data61, CSIRO -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -import networkx as nx -from stellargraph.data.epgm import EPGM - - -def read_graph(graph_file, dataset_name, is_directed=False, is_weighted=False): - """ - Reads the input network in networkx. - - Args: - graph_file: The directory where graph in EPGM format is stored. - dataset_name: The name of the graph selected out of all the graph heads in EPGM file. - - Returns: - The graph in networkx format - """ - - if graph_file.split(".")[-1] == "gpickle": - g = nx.read_gpickle(graph_file) - for edge in g.edges(): - g[edge[0]][edge[1]]["weight"] = 1 # {'weight': 1} - - if not is_directed: - g = g.to_undirected() - - return g - - try: # assume args.input points to an EPGM graph - G_epgm = EPGM(graph_file) - graphs = G_epgm.G["graphs"] - if ( - dataset_name is None - ): # if dataset_name is not given, use the name of the 1st graph head - dataset_name = graphs[0]["meta"]["label"] - print( - "WARNING: dataset name not specified, using dataset '{}' in the 1st graph head".format( - dataset_name - ) - ) - graph_id = None - for g in graphs: - if g["meta"]["label"] == dataset_name: - graph_id = g["id"] - - g = G_epgm.to_nx(graph_id, is_directed) - if is_weighted: - raise NotImplementedError - else: - # This is the correct way to set the edge weight in a MultiGraph. - edge_weights = {e: 1 for e in g.edges(keys=True)} - nx.set_edge_attributes(g, name="weight", values=edge_weights) - except: # otherwise, assume arg.input points to an edgelist file - if is_weighted: - g = nx.read_edgelist( - graph_file, - nodetype=int, - data=(("weight", float),), - create_using=nx.DiGraph(), - ) - else: - g = nx.read_edgelist(graph_file, nodetype=int, create_using=nx.DiGraph()) - for edge in g.edges(): - g[edge[0]][edge[1]]["weight"] = 1 # {'weight': 1} - - if not is_directed: - g = g.to_undirected() - - print( - "Graph statistics: {} nodes, {} edges".format( - g.number_of_nodes(), g.number_of_edges() - ) - ) - return g diff --git a/demos/node-classification/attri2vec/attri2vec-citeseer-node-classification-example.ipynb b/demos/node-classification/attri2vec-node-classification.ipynb similarity index 100% rename from demos/node-classification/attri2vec/attri2vec-citeseer-node-classification-example.ipynb rename to demos/node-classification/attri2vec-node-classification.ipynb diff --git a/demos/node-classification/attri2vec/README.md b/demos/node-classification/attri2vec/README.md deleted file mode 100644 index a9c0f35b6..000000000 --- a/demos/node-classification/attri2vec/README.md +++ /dev/null @@ -1,33 +0,0 @@ -## Node classification using attri2vec [1] - -This folder contains a [Jupyter](http://jupyter.org/) python notebook demonstrating the combined use of -`stellargraph` (this library) and `Scikit-learn` [2] libraries for node classification in a homogeneous graph -attached with node attributes. - -The example demonstrates node representation learning and node classification using the citeseer -paper citation network. This demo is included in the Jupyter notebook -`attri2vec-citeseer-node-classification-example.ipynb`. - -The notebook includes all the information for downloading the corresponding dataset, training the attri2vec -model and using it to classify nodes with unknown (to the training algorithm) labels. - -To run the notebook, install Jupyter to the same Python 3.6 environment as StellarGraph, following the instructions on -the Jupyter project website: http://jupyter.org/install.html - -After starting the Jupyter server on your computer, load the notebook and follow the instructions inside. - -## Requirements - -The example uses Python 3.6 and the StellarGraph library. To install the StellarGraph library -follow the instructions at: https://github.com/stellargraph/stellargraph - -Additional requirements are Pandas, Numpy and Scikit-Learn which are installed as dependencies -of the StellarGraph library. In addition, Juptyer is required to run the notebook version of -the example. - -## References - -**1.** Attributed Network Embedding via Subspace Discovery. D. Zhang, J, Yin, X. Zhu and C. Zhang, arXiv:1901.04095, -[cs.SI], 2019. ([link](https://arxiv.org/abs/1901.04095)) - -**2.** Scikit-learn: Machine learning in Python ([link](http://scikit-learn.org/stable/)) diff --git a/demos/node-classification/cluster-gcn/cluster-gcn-node-classification.ipynb b/demos/node-classification/cluster-gcn-node-classification.ipynb similarity index 100% rename from demos/node-classification/cluster-gcn/cluster-gcn-node-classification.ipynb rename to demos/node-classification/cluster-gcn-node-classification.ipynb diff --git a/demos/node-classification/graphsage/directed-graphsage-on-cora-example.ipynb b/demos/node-classification/directed-graphsage-node-classification.ipynb similarity index 100% rename from demos/node-classification/graphsage/directed-graphsage-on-cora-example.ipynb rename to demos/node-classification/directed-graphsage-node-classification.ipynb diff --git a/demos/node-classification/gat/gat-cora-node-classification-example.ipynb b/demos/node-classification/gat-node-classification.ipynb similarity index 100% rename from demos/node-classification/gat/gat-cora-node-classification-example.ipynb rename to demos/node-classification/gat-node-classification.ipynb diff --git a/demos/node-classification/gat/README.md b/demos/node-classification/gat/README.md deleted file mode 100644 index 2538e9ba9..000000000 --- a/demos/node-classification/gat/README.md +++ /dev/null @@ -1,26 +0,0 @@ -# GAT for Node Classification - -This is an example of using the Graph Attention network (GAT) algorithm [1] for semi-supervised node classification -in a homogeneous network. - -## Requirements -All examples use Python 3.6 and the StellarGraph library. To install the StellarGraph library -follow the instructions at: https://github.com/stellargraph/stellargraph - -Additional requirements are Pandas, Numpy and Scikit-Learn which are installed as depdendencies -of the StellarGraph library. In addition Juptyer is required to run the notebook version of -the example. - -## Running the notebook - -The same example is also available as a Juptyer notebook. To use this install Jupyter to the -same Python 3.6 environment as StellarGraph, following the instructions on the Jupyter project -website: http://jupyter.org/install.html - -After starting the Jupyter server on your computer, load the notebook -`gat-cora-node-classification-example.ipynb` and follow the instructions inside. - - -## References - -[1] Graph Attention Networks. P. Velickovic et al. ICLR 2018 ([link](https://arxiv.org/abs/1710.10903)) diff --git a/demos/node-classification/gcn/gcn-cora-node-classification-example.ipynb b/demos/node-classification/gcn-node-classification.ipynb similarity index 100% rename from demos/node-classification/gcn/gcn-cora-node-classification-example.ipynb rename to demos/node-classification/gcn-node-classification.ipynb diff --git a/demos/node-classification/gcn/Cora-features.png b/demos/node-classification/gcn/Cora-features.png deleted file mode 100644 index dd4844ee190374ed3704c9603f5b2a3168ebd77f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 200362 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

gx4u)uFOo=Li{NlQz6 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

()`x0H#um$IAvcS=qR2DL;od`1^WB$oWj*5 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

0TJK%DG=v5bF}`c+G00-tK?L?0 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

W6~ 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 diff --git a/demos/node-classification/gcn/README.md b/demos/node-classification/gcn/README.md deleted file mode 100644 index 61753c99f..000000000 --- a/demos/node-classification/gcn/README.md +++ /dev/null @@ -1,16 +0,0 @@ -# GCN for Node Classification - -This is an example of using the Graph Convolutional network (GCN) algorithm [1] for semi-supervised node classification -in a homogeneous network. - -## Requirements -All examples use Python 3.6 and the StellarGraph library. To install the StellarGraph library -follow the instructions at: https://github.com/stellargraph/stellargraph - -Additional requirements are Pandas, Numpy and Scikit-Learn which are installed as depdendencies -of the StellarGraph library. - -## References - -[1] Semi-Supervised Classification with Graph Convolutional Networks. T. Kipf, M. Welling. -ICLR 2017. arXiv:1609.02907 ([link](https://arxiv.org/abs/1609.02907)) diff --git a/demos/node-classification/graphsage/graphsage-pubmed-inductive-node-classification-example.ipynb b/demos/node-classification/graphsage-inductive-node-classification.ipynb similarity index 100% rename from demos/node-classification/graphsage/graphsage-pubmed-inductive-node-classification-example.ipynb rename to demos/node-classification/graphsage-inductive-node-classification.ipynb diff --git a/demos/node-classification/graphsage/graphsage-cora-node-classification-example.ipynb b/demos/node-classification/graphsage-node-classification.ipynb similarity index 100% rename from demos/node-classification/graphsage/graphsage-cora-node-classification-example.ipynb rename to demos/node-classification/graphsage-node-classification.ipynb diff --git a/demos/node-classification/graphsage/README.md b/demos/node-classification/graphsage/README.md deleted file mode 100644 index 55dcadfc5..000000000 --- a/demos/node-classification/graphsage/README.md +++ /dev/null @@ -1,38 +0,0 @@ -# GraphSAGE Node Classification - -This folder includes two examples of using the GraphSAGE algorithm [1] for semi-supervised node classification in -homogeneous networks. - -The first example demonstrates transductive node classification using the Cora citation network. This demo is included -as the Python script `graphsage-cora-example.py` and as the Jupyter -notebook `graphsage-cora-node-classification-example.ipynb`. - -The second example demonstrates inductive representation learning and node classification using the Pubmed-Diabetes -paper citation network. This demo is included in the Jupyter notebook -`graphsage-pubmed-inductive-node-classification-example.ipynb`. - -The two Jupyter notebooks include all the information for downloading the corresponding datasets, training the GraphSAGE -models and using them to classify nodes with unknown (to the training algorithm) labels. - -To run the notebooks install Jupyter to the same Python 3.6 environment as StellarGraph, following the instructions on -the Jupyter project website: http://jupyter.org/install.html - -After starting the Jupyter server on your computer, load either of the two notebooks and follow the instructions inside. - -## Requirements -All examples use Python 3.6 and the StellarGraph library. To install the StellarGraph library -follow the instructions at: https://github.com/stellargraph/stellargraph - -Additional requirements are Pandas, Numpy and Scikit-Learn which are installed as depdendencies -of the StellarGraph library. In addition Juptyer is required to run the notebook version of -the example. - -## CORA dataset - -Currently the examples in this directory are tested on the CORA dataset. The GraphSAGE model assumes that node -features are available for all nodes in the graph. - -## References - -[1] W. L. Hamilton, R. Ying, and J. Leskovec, “Inductive representation learning on large graphs,” presented at NIPS 2017 -([arXiv:1706.02216](https://arxiv.org/abs/1706.02216)). diff --git a/demos/node-classification/hinsage/README.md b/demos/node-classification/hinsage/README.md deleted file mode 100644 index b73dc65fb..000000000 --- a/demos/node-classification/hinsage/README.md +++ /dev/null @@ -1,71 +0,0 @@ -# HinSAGE Node Classification - -This is an example of using a Heterogenous extension to the GraphSAGE algorithm [1], called HinSAGE, -to classify the nodes in a heterogeneous network (a network with multiple node and link types). - -This example uses the Yelp dataset and aims to predict the 'elite' status of users. It does this -as a binary classification task predicting if the user has had 'elite' status in any year or has -never had 'elite' status. - -## Requirements -Install the StellarGraph library following the instructions at: -https://github.com/stellargraph/stellargraph - -Additional requirements are Pandas, Numpy and Scikit-Learn. These are installed as depdendencies -of the StellarGraph library. - -## Yelp dataset - -Currently the examples in this directory use the Yelp dataset. -The Yelp dataset can be obtained by navigating to https://www.yelp.com/dataset, -selecting "Download Dataset" and signing the licence agreement. -Then, download the JSON dataset and uncompress it to an appropriate location -in your filesystem. - -There are several different versions of the dataset, enumerated by "rounds", -to check which round the dataset is, look for the file named "Yelp_Dataset_Challenge_Round_XX.pdf" -where "XX" is the round number. The current script supports rounds 12 and 13. -The path to the Yelp dataset used below should contain the JSON files including -`yelp_academic_dataset_user.json` or `user.json` depending on the round number. - -The example code uses a preprocessed version of the dataset that is generated -by the `yelp-preprocessing.py` script. -To run this script, specify: -the path to the Yelp dataset that you downloaded (`-l`), -the output directory (`-o`), -and the round number (`-r`, which defaults to 13). - -Example usage: -``` -python yelp-preprocessing.py -r XX -l -o . -``` - -By default the script will filter the graph to contain only businesses in the state -of Wisconsin. To change this to another state, or to "false" to use the entire dataset -(warning: this will make the machine learning example run very slowly and will require a lot of -memory as the entire graph will be loaded). - -Example usage to run without filtering: -``` -python yelp-preprocessing.py -l -o . --filter_state=false -``` - -## Running the example - -The example script can be run on supplying the location of the preprocessed Yelp dataset. - -Example usage: -``` -python yelp-example.py -l -``` - -Additional command line arguments are available to tune the training of the model, to see a -description of these arguments use the `--help` argument: -``` -python yelp-example.py --help -``` - -## References - -[1] W. L. Hamilton, R. Ying, and J. Leskovec, “Inductive representation learning on large graphs,” presented at NIPS 2017 -([arXiv:1706.02216](https://arxiv.org/abs/1706.02216)). diff --git a/demos/node-classification/hinsage/yelp-example.py b/demos/node-classification/hinsage/yelp-example.py deleted file mode 100644 index 520b19387..000000000 --- a/demos/node-classification/hinsage/yelp-example.py +++ /dev/null @@ -1,263 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright 2018-2020 Data61, CSIRO -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -""" -Example of heterogeneous graph node classification using HinSAGE. - -Requires the preprocessed Yelp dataset .. see the script `yelp_preprocessing.py` -for more details. We assume that the preprocessing script has been run. - -Example usage: -python yelp-example.py -l - -Additional command line arguments are available to tune the learned model, to see a -description of these arguments use the `--help` argument: -python yelp-example.py --help - -""" -import os -import argparse -import numpy as np -import pandas as pd -import networkx as nx -from tensorflow import keras -from tensorflow.keras import optimizers, layers, metrics -import tensorflow.keras.backend as K - -from stellargraph.core import StellarGraph -from stellargraph.layer import HinSAGE -from stellargraph.mapper import HinSAGENodeGenerator - -from sklearn import model_selection -from sklearn import metrics as sk_metrics - - -def weighted_binary_crossentropy(weights): - """ - Weighted binary cross-entropy loss - Args: - weights: A list or numpy array of weights per class - - Returns: - A Keras loss function - """ - weights = np.asanyarray(weights, dtype="float32") - - def loss_fn(y_true, y_pred): - return K.mean(K.binary_crossentropy(y_true, y_pred) * weights, axis=-1) - - return loss_fn - - -def train( - G, - user_targets, - layer_size, - num_samples, - batch_size, - num_epochs, - learning_rate, - dropout, -): - """ - Train a HinSAGE model on the specified graph G with given parameters. - - Args: - G: A StellarGraph object - layer_size: A list of number of hidden nodes in each layer - num_samples: Number of neighbours to sample at each layer - batch_size: Size of batch for inference - num_epochs: Number of epochs to train the model - learning_rate: Initial Learning rate - dropout: The dropout (0->1) - """ - print(G.info()) - - # Split "user" nodes into train/test - # Split nodes into train/test using stratification. - train_targets, test_targets = model_selection.train_test_split( - user_targets, train_size=0.25, test_size=None - ) - - print("Train targets:\n", train_targets.iloc[:, 0].value_counts()) - print("Test targets:\n", test_targets.iloc[:, 0].value_counts()) - - # The mapper feeds data from sampled subgraph to GraphSAGE model - generator = HinSAGENodeGenerator(G, batch_size, num_samples, head_node_type="user") - train_gen = generator.flow_from_dataframe(train_targets, shuffle=True) - test_gen = generator.flow_from_dataframe(test_targets) - - # GraphSAGE model - model = HinSAGE(layer_sizes=layer_size, generator=generator, dropout=dropout) - x_inp, x_out = model.in_out_tensors() - - # Final estimator layer - prediction = layers.Dense(units=train_targets.shape[1], activation="softmax")(x_out) - - # The elite label is only true for a small fraction of the total users, - # so weight the training loss to ensure that model learns to predict - # the positive class. - # class_count = train_targets.values.sum(axis=0) - # weights = class_count.sum()/class_count - weights = [0.01, 1.0] - print("Weighting loss by: {}".format(weights)) - - # Create Keras model for training - model = keras.Model(inputs=x_inp, outputs=prediction) - model.compile( - optimizer=optimizers.Adam(lr=learning_rate), - loss=weighted_binary_crossentropy(weights), - metrics=[metrics.binary_accuracy], - ) - - # Train model - history = model.fit(train_gen, epochs=num_epochs, verbose=2, shuffle=False) - - # Evaluate on test set and print metrics - predictions = model.predict(test_gen) - binary_predictions = predictions[:, 1] > 0.5 - print("\nTest Set Metrics (on {} nodes)".format(len(predictions))) - - # Calculate metrics using Scikit-Learn - cm = sk_metrics.confusion_matrix(test_targets.iloc[:, 1], binary_predictions) - print("Confusion matrix:") - print(cm) - - accuracy = sk_metrics.accuracy_score(test_targets.iloc[:, 1], binary_predictions) - precision = sk_metrics.precision_score(test_targets.iloc[:, 1], binary_predictions) - recall = sk_metrics.recall_score(test_targets.iloc[:, 1], binary_predictions) - f1 = sk_metrics.f1_score(test_targets.iloc[:, 1], binary_predictions) - roc_auc = sk_metrics.roc_auc_score(test_targets.iloc[:, 1], predictions[:, 1]) - - print( - "accuracy = {:0.3}, precision = {:0.3}, recall = {:0.3}, f1 = {:0.3}".format( - accuracy, precision, recall, f1 - ) - ) - print("ROC AUC = {:0.3}".format(roc_auc)) - - # Save model - save_str = "_n{}_l{}_d{}_r{}".format( - "_".join([str(x) for x in num_samples]), - "_".join([str(x) for x in layer_size]), - dropout, - learning_rate, - ) - model.save("yelp_model" + save_str + ".h5") - - -if __name__ == "__main__": - parser = argparse.ArgumentParser( - description="Graph node classification using GraphSAGE" - ) - parser.add_argument( - "-l", - "--location", - type=str, - default=None, - help="The location of the pre-processes Yelp dataset.", - ) - parser.add_argument( - "-b", "--batch_size", type=int, default=200, help="Batch size for training" - ) - parser.add_argument( - "-e", - "--epochs", - type=int, - default=10, - help="The number of epochs to train the model", - ) - parser.add_argument( - "-d", - "--dropout", - type=float, - default=0.0, - help="Dropout for the GraphSAGE model, between 0.0 and 1.0", - ) - parser.add_argument( - "-r", - "--learningrate", - type=float, - default=0.001, - help="Learning rate for training model", - ) - parser.add_argument( - "-n", - "--neighbour_samples", - type=int, - nargs="*", - default=[10, 5], - help="The number of nodes sampled at each layer", - ) - parser.add_argument( - "-s", - "--layer_size", - type=int, - nargs="*", - default=[80, 80], - help="The number of hidden features at each layer", - ) - - args = parser.parse_args() - - # Load graph and data - if args.location is not None: - data_loc = os.path.expanduser(args.location) - else: - raise ValueError( - "Please specify the directory containing the dataset using the '-l' flag" - ) - - # Read the data - print("Reading user features and targets...") - user_features = pd.read_pickle(os.path.join(data_loc, "user_features_filtered.pkl")) - user_targets = pd.read_pickle(os.path.join(data_loc, "user_targets_filtered.pkl")) - - # Quick check of target sanity - vc = user_targets.iloc[:, 0].value_counts() - if vc.iloc[0] == vc.sum(): - raise ValueError( - "Targets are all the same, there has been an error in data processing" - ) - - print("Reading business features...") - business_features = pd.read_pickle( - os.path.join(data_loc, "business_features_filtered.pkl") - ) - - # Load graph - print("Loading the graph...") - Gnx = nx.read_graphml(os.path.join(data_loc, "yelp_graph_filtered.graphml")) - - # Features should be supplied as a dictionary of {node_type: DataFrame} for all - # node types in the graph - features = {"user": user_features, "business": business_features} - - # Create stellar Graph object - G = StellarGraph.from_networkx( - Gnx, node_type_attr="ntype", edge_type_attr="etype", node_features=features - ) - - train( - G, - user_targets, - args.layer_size, - args.neighbour_samples, - args.batch_size, - args.epochs, - args.learningrate, - args.dropout, - ) diff --git a/demos/node-classification/hinsage/yelp-preprocessing.py b/demos/node-classification/hinsage/yelp-preprocessing.py deleted file mode 100644 index ef2278b93..000000000 --- a/demos/node-classification/hinsage/yelp-preprocessing.py +++ /dev/null @@ -1,383 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copyright 2018-2020 Data61, CSIRO -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -""" -This script preprocesses and filters the Yelp dataset to convert the attributes -of users and businesses to numeric features for use with graph machine-learning. - -This script requires the Yelp dataset as input which can be obtained by from the -Yelp Dataset website: https://www.yelp.com/dataset -To download the dataset, select "Download Dataset" on the Yelp Dataset website, -sign the licence agreement, and download the JSON dataset from the download page. -FInally, uncompress the file to an appropriate location. - -To use this script, supply the location that you uncompressed the dataset, -(this location should contain "yelp_academic_dataset_user.json") -the output directory (-o) and any other optional arguments: - -Example usage: - python yelp_preprocessing.py -l -o . - -By default the script will filter the graph to contain only businesses in the state -of Wisconsin. To change this to another state, or to "false" to use the entire dataset -(warning: this will make the machine learning example run very slowly). - -Example usage to run without filtering: - python yelp_preprocessing.py -l -o . --filter_state=false - -""" -import os -import json -import argparse -import pickle - -import networkx as nx -import numpy as np -import pandas as pd - -from tensorflow.keras.utils import Progbar -from sklearn import preprocessing, feature_extraction, pipeline - -user_feature_names = [ - "review_count", - "useful", - "funny", - "cool", - "fans", - "average_stars", - "compliment_hot", - "compliment_more", - "compliment_profile", - "compliment_cute", - "compliment_list", - "compliment_note", - "compliment_plain", - "compliment_cool", - "compliment_funny", - "compliment_writer", - "compliment_photos", -] - -user_target_name = "elite" - -business_feature_names = ["review_count", "stars"] - - -if __name__ == "__main__": - - parser = argparse.ArgumentParser( - description="Yelp data processing for Yelp HinSAGE demo" - ) - parser.add_argument( - "-l", - "--location", - nargs="?", - type=str, - default=None, - help="Location of Yelp JSON data files", - ) - parser.add_argument( - "-r", - "--round", - nargs="?", - type=int, - default=13, - help="Yelp dataset round number", - ) - parser.add_argument( - "-o", - "--output", - nargs="?", - type=str, - default=None, - help="Location to store the output, this should be an existing directory", - ) - parser.add_argument( - "-s", - "--filter_state", - nargs="?", - type=str, - default="WI", - help="Filter yelp dataset to only contain records connected to this US State", - ) - parser.add_argument( - "--users_only", action="store_true", help="Create a graph with only users" - ) - parser.add_argument( - "--save_preprocessors", - action="store_true", - help="Save the fitted data preprocessors", - ) - parser.add_argument( - "--use_sparse", action="store_true", help="Save features as sparse matrices" - ) - args = parser.parse_args() - - # Parameters - yelp_location = args.location - output_location = args.output - filter_state = args.filter_state.lower() - filter_friends = True - use_sparse = args.use_sparse - - # In round 12 the value for no elite status for all years was "None" - # in round 13 it is "" - non_elite_values = ["None", ""] - if args.round == 12: - user_dataset_name = "yelp_academic_dataset_user.json" - business_dataset_name = "yelp_academic_dataset_business.json" - review_dataset_name = "yelp_academic_dataset_review.json" - - elif args.round == 13: - user_dataset_name = "user.json" - business_dataset_name = "business.json" - review_dataset_name = "review.json" - - else: - raise ValueError("Only round 12 & 13 is currently supported.") - - # Check mandatory arguments - if not yelp_location: - raise RuntimeError( - "Please specify the location of the Yelp dataset with the -l argument" - ) - if not output_location: - raise RuntimeError("Please specify the output directory with the -o argument") - - # Check directories: - if not os.path.isdir(output_location): - raise OSError( - "The specified output location doesn't exist or isn't a directory" - ) - - # Load user data from json to a dictionary with the user_id as key - # Note we modify user_id to have a prefix 'u_' as there are conflicts - # in the IDs between users & businesses - print("Loading user data") - with open(os.path.join(yelp_location, user_dataset_name), "r") as f: - user_data_raw = {} - for line in f: - d = json.loads(line) - d["user_id"] = "u_" + d["user_id"] - user_data_raw[d["user_id"]] = d - - # Load business data from json to a dictionary with the business_id as key - print("Loading business data") - with open(os.path.join(yelp_location, business_dataset_name), "r") as f: - business_data_raw = {} - for line in f: - d = json.loads(line) - d["business_id"] = "b_" + d["business_id"] - business_data_raw[d["business_id"]] = d - - # Load review data from json to a dictionary with the review_id as key - print("Loading review data") - with open(os.path.join(yelp_location, review_dataset_name), "r") as f: - review_data_raw = {} - for line in f: - d = json.loads(line) - d["user_id"] = "u_" + d["user_id"] - d["business_id"] = "b_" + d["business_id"] - d["review_id"] = "r_" + d["review_id"] - review_data_raw[d["review_id"]] = d - - # Create NX graph - G = nx.Graph() - - # Maintain a list of users, businesses and reviews in graphs - # these are sets to make inclusion checking fast - users_in_graph = set() - business_in_graph = set() - reviews_in_graph = set() - - # Create business nodes - print("\nAdding businesses to graph") - p = Progbar(len(business_data_raw)) - for ii, b in enumerate(business_data_raw.values()): - p.update(ii) - if filter_state != "false" and b["state"].lower() != filter_state: - continue - G.add_node(b["business_id"], ntype="business") - - # Add business to set - business_in_graph.add(b["business_id"]) - - # Create review links - print("\nAdding reviews to graph") - p = Progbar(len(review_data_raw)) - for ii, r in enumerate(review_data_raw.values()): - p.update(ii) - if r["business_id"] not in business_in_graph: - continue - - # Add the user node - G.add_node(r["user_id"], ntype="user") - - # Add the review edge - G.add_edge(r["user_id"], r["business_id"], etype="review") - - # Add user and review to sets - users_in_graph.add(r["user_id"]) - reviews_in_graph.add(r["review_id"]) - - # Create friendship graph - print("\nAdding users to graph") - p = Progbar(len(user_data_raw)) - for ii, u in enumerate(user_data_raw.values()): - p.update(ii) - if u["user_id"] not in users_in_graph: - continue - - # Connect to friends - if u["friends"] != "None": - # Parse friends into list & add "u_" prefix for user ID maps - friend_list = ["u_" + f for f in u["friends"].split(", ")] - - # optionally include friend nodes not connected to reviews - if filter_friends: - friend_list = [f for f in friend_list if f in users_in_graph] - else: - users_in_graph.update(friend_list) - - # Add friend nodes and friend edges to graph - G.add_nodes_from(friend_list, ntype="user") - G.add_edges_from([(u["user_id"], f) for f in friend_list], etype="friend") - - print( - "\nNumber of users: {}, number of businesses: {}, number of reviews: {}".format( - len(users_in_graph), len(business_in_graph), len(reviews_in_graph) - ) - ) - - # --- Convert User Features --- - print("Converting user features") - - # Extract user data and user_ids - user_ids = list(users_in_graph) - user_attributes = [ - {k: v for k, v in user_data_raw[uid].items() if k in user_feature_names} - for uid in user_ids - ] - - # Preprocess user features using Scikit-Learn - # Note we use a nonlinear transform as the user features as mostly counts - # which are highly non-normal. - uf_extract = feature_extraction.DictVectorizer(sparse=use_sparse) - uf_transform = preprocessing.FunctionTransformer(np.log1p, np.expm1) - uf_encoder = pipeline.Pipeline([("extract", uf_extract), ("scale", uf_transform)]) - user_features = uf_encoder.fit_transform(user_attributes) - - # Create a Pandas dataframe to store features - user_features = pd.DataFrame(user_features, index=user_ids) - del user_attributes - - # Get user targets: - - # 'elite' attribute is a comma separated list of years that they are elite - # target_data = [ - # {k: 1 for k in user_data_raw[uid][user_target_name].split(", ")} - # for uid in user_ids - # ] - - # Transform elite attribute to simple true and false: - # note that the original data contains a list of years they have elite status - target_data = [ - { - user_target_name: "false" - if user_data_raw[uid][user_target_name] in non_elite_values - else "true" - } - for uid in user_ids - ] - target_encoder = feature_extraction.DictVectorizer(sparse=use_sparse) - user_targets = target_encoder.fit_transform(target_data) - del target_data - del user_data_raw - - print(user_targets.shape) - - # Store as a Pandas dataframe - user_targets = pd.DataFrame(user_targets, index=user_ids) - - print("Target values:") - print(user_targets[0].value_counts()) - - # --- Convert Business Features --- - print("Converting business features") - - # Extract features for business: - business_ids = list(business_in_graph) - business_attributes = [ - {k: v for k, v in business_data_raw[bid].items() if k in business_feature_names} - for bid in business_ids - ] - - # Preprocess business features using Scikit-Learn - # Note we use a log transform as the user features as mostly counts - # which are highly non-normal. - bf_encoding = feature_extraction.DictVectorizer(sparse=use_sparse) - bf_transform = preprocessing.FunctionTransformer(np.log1p, np.expm1) - # bf_transform = preprocessing.QuantileTransformer(n_quantiles=10) - bf_encoder = pipeline.Pipeline([("extract", bf_encoding), ("scale", bf_transform)]) - business_attribute_features = bf_encoder.fit_transform(business_attributes).astype( - "float32" - ) - - # Extract features for business categories separately. - business_categories = [ - {k: 1 for k in business_data_raw[bid]["categories"].split(", ")} - if business_data_raw[bid]["categories"] is not None - else {} - for bid in business_ids - ] - bc_encoder = feature_extraction.DictVectorizer(sparse=False) - business_category_features = bc_encoder.fit_transform(business_categories).astype( - "float32" - ) - - # Concatenate business features and business categories - business_features = np.concatenate( - [business_attribute_features, business_category_features], axis=1 - ) - del business_data_raw - del business_attributes - del business_attribute_features - del business_category_features - - business_features = pd.DataFrame(business_features, index=business_ids) - - # Optional: Save the encoders to apply to different data - encodings = { - "user_feature": uf_encoder, - "user_target": target_encoder, - "business_feature": bf_encoder, - "business_category": bc_encoder, - } - with open(os.path.join(output_location, "yelp_preprocessing.pkl"), "wb") as f: - pickle.dump(encodings, f) - - # Save features - print("\nSaving feature data") - user_features.to_pickle(os.path.join(output_location, "user_features_filtered.pkl")) - business_features.to_pickle( - os.path.join(output_location, "business_features_filtered.pkl") - ) - user_targets.to_pickle(os.path.join(output_location, "user_targets_filtered.pkl")) - - # Save graph - graph_location = os.path.join(output_location, "yelp_graph_filtered.graphml") - print("Saving graph as {}".format(graph_location)) - nx.write_graphml(G, graph_location) diff --git a/demos/node-classification/node2vec/stellargraph-node2vec-node-classification.ipynb b/demos/node-classification/node2vec-node-classification.ipynb similarity index 100% rename from demos/node-classification/node2vec/stellargraph-node2vec-node-classification.ipynb rename to demos/node-classification/node2vec-node-classification.ipynb diff --git a/demos/node-classification/node2vec/stellargraph-node2vec-weighted-random-walks.ipynb b/demos/node-classification/node2vec-weighted-node-classification.ipynb similarity index 100% rename from demos/node-classification/node2vec/stellargraph-node2vec-weighted-random-walks.ipynb rename to demos/node-classification/node2vec-weighted-node-classification.ipynb diff --git a/demos/node-classification/node2vec/README.md b/demos/node-classification/node2vec/README.md deleted file mode 100644 index 818bf4ac1..000000000 --- a/demos/node-classification/node2vec/README.md +++ /dev/null @@ -1,23 +0,0 @@ -## Node classification using Node2Vec [1] - -This folder contains two [Jupyter](http://jupyter.org/) python notebooks demonstrating the combined use of -`stellargraph` (this library), `Gensim` [4], and `Scikit-learn` [3] libraries for node classification in a -homogeneous graph. - -The examples demonstrate how to calculate node embedding vectors in just a few lines of Python code using the -`Node2Vec` [1] algorithm on both weighted and unweighted graphs. - -The learned node representations are then used in a node classification task. Specifically, the example demonstrates -how to predict the subject of a research paper given a paper citation network. The latter is a homogeneous graph -with nodes representing research papers that have a single attribute, namely the subject of the paper. Links in the -graph represent a citation relationship between two papers, i.e., `paper A` cites `paper B`. The graph is -treated as undirected. - -## References - -**1.** Node2Vec: Scalable Feature Learning for Networks. A. Grover, J. Leskovec. ACM SIGKDD International Conference -on Knowledge Discovery and Data Mining (KDD), 2016. ([link](https://snap.stanford.edu/node2vec/)) - -**2.** Gensim: Topic modelling for humans. ([link](https://radimrehurek.com/gensim/)) - -**3.** Scikit-learn: Machine learning in Python ([link](http://scikit-learn.org/stable/)) diff --git a/demos/node-classification/ppnp/ppnp-cora-node-classification-example.ipynb b/demos/node-classification/ppnp-node-classification.ipynb similarity index 100% rename from demos/node-classification/ppnp/ppnp-cora-node-classification-example.ipynb rename to demos/node-classification/ppnp-node-classification.ipynb diff --git a/demos/node-classification/ppnp/README.md b/demos/node-classification/ppnp/README.md deleted file mode 100644 index 85357af73..000000000 --- a/demos/node-classification/ppnp/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# PPNP and APPNP for Node Classification - -This is an example of using the Personalized Propogation of Neural Predictions (PPNP) and Approximate PPNP (APPNP) -algorithms [1] for semi-supervised node classification in a homogeneous network. - -## Requirements -All examples use Python 3.6 and the StellarGraph library. To install the StellarGraph library -follow the instructions at: https://github.com/stellargraph/stellargraph - -Additional requirements are Pandas, Numpy, Keras, and Scikit-Learn which are installed as depdendencies -of the StellarGraph library. - -## References - -[1] Predict then propagate: Graph neural networks meet personalized PageRank. J. Klicpera, A. Bojchevski, and S. Günnemann, S., ICLR, 2019. ([link](https://arxiv.org/abs/1810.05997)) diff --git a/demos/node-classification/rgcn/rgcn-aifb-node-classification-example.ipynb b/demos/node-classification/rgcn-node-classification.ipynb similarity index 100% rename from demos/node-classification/rgcn/rgcn-aifb-node-classification-example.ipynb rename to demos/node-classification/rgcn-node-classification.ipynb diff --git a/demos/node-classification/sgc/sgc-node-classification-example.ipynb b/demos/node-classification/sgc-node-classification.ipynb similarity index 100% rename from demos/node-classification/sgc/sgc-node-classification-example.ipynb rename to demos/node-classification/sgc-node-classification.ipynb diff --git a/demos/time-series/gcn-lstm-LA.ipynb b/demos/time-series/gcn-lstm-time-series.ipynb similarity index 100% rename from demos/time-series/gcn-lstm-LA.ipynb rename to demos/time-series/gcn-lstm-time-series.ipynb diff --git a/docs/demos/connector/neo4j/directed-graphsage-on-cora-neo4j-example.nblink b/docs/demos/connector/neo4j/directed-graphsage-on-cora-neo4j-example.nblink deleted file mode 100644 index 95bfccc16..000000000 --- a/docs/demos/connector/neo4j/directed-graphsage-on-cora-neo4j-example.nblink +++ /dev/null @@ -1,3 +0,0 @@ -{ - "path": "../../../../demos/connector/neo4j/directed-graphsage-on-cora-neo4j-example.ipynb" -} diff --git a/docs/demos/connector/neo4j/load-cora-into-neo4j.nblink b/docs/demos/connector/neo4j/load-cora-into-neo4j.nblink deleted file mode 100644 index 4ade26094..000000000 --- a/docs/demos/connector/neo4j/load-cora-into-neo4j.nblink +++ /dev/null @@ -1,3 +0,0 @@ -{ - "path": "../../../../demos/connector/neo4j/load-cora-into-neo4j.ipynb" -} diff --git a/docs/demos/connector/neo4j/undirected-graphsage-on-cora-neo4j-example.nblink b/docs/demos/connector/neo4j/undirected-graphsage-on-cora-neo4j-example.nblink deleted file mode 100644 index d02062a40..000000000 --- a/docs/demos/connector/neo4j/undirected-graphsage-on-cora-neo4j-example.nblink +++ /dev/null @@ -1,3 +0,0 @@ -{ - "path": "../../../../demos/connector/neo4j/undirected-graphsage-on-cora-neo4j-example.ipynb" -} diff --git a/docs/demos/embeddings/attri2vec-embeddings.nblink b/docs/demos/embeddings/attri2vec-embeddings.nblink new file mode 100644 index 000000000..f5a69ac77 --- /dev/null +++ b/docs/demos/embeddings/attri2vec-embeddings.nblink @@ -0,0 +1,3 @@ +{ + "path": "../../../demos/embeddings/attri2vec-embeddings.ipynb" +} diff --git a/docs/demos/embeddings/deep-graph-infomax-cora.nblink b/docs/demos/embeddings/deep-graph-infomax-cora.nblink deleted file mode 100644 index 3650b6686..000000000 --- a/docs/demos/embeddings/deep-graph-infomax-cora.nblink +++ /dev/null @@ -1,3 +0,0 @@ -{ - "path": "../../../demos/embeddings/deep-graph-infomax-cora.ipynb" -} diff --git a/docs/demos/embeddings/deep-graph-infomax-embeddings.nblink b/docs/demos/embeddings/deep-graph-infomax-embeddings.nblink new file mode 100644 index 000000000..fc7db9ba2 --- /dev/null +++ b/docs/demos/embeddings/deep-graph-infomax-embeddings.nblink @@ -0,0 +1,3 @@ +{ + "path": "../../../demos/embeddings/deep-graph-infomax-embeddings.ipynb" +} diff --git a/docs/demos/embeddings/embeddings-unsupervised-graphsage-cora.nblink b/docs/demos/embeddings/embeddings-unsupervised-graphsage-cora.nblink deleted file mode 100644 index 80aead2ca..000000000 --- a/docs/demos/embeddings/embeddings-unsupervised-graphsage-cora.nblink +++ /dev/null @@ -1,3 +0,0 @@ -{ - "path": "../../../demos/embeddings/embeddings-unsupervised-graphsage-cora.ipynb" -} diff --git a/docs/demos/embeddings/graphsage-unsupervised-sampler-embeddings.nblink b/docs/demos/embeddings/graphsage-unsupervised-sampler-embeddings.nblink new file mode 100644 index 000000000..fcf8bebe6 --- /dev/null +++ b/docs/demos/embeddings/graphsage-unsupervised-sampler-embeddings.nblink @@ -0,0 +1,3 @@ +{ + "path": "../../../demos/embeddings/graphsage-unsupervised-sampler-embeddings.ipynb" +} diff --git a/docs/demos/embeddings/graphwave-barbell.nblink b/docs/demos/embeddings/graphwave-barbell.nblink deleted file mode 100644 index 8f758afd2..000000000 --- a/docs/demos/embeddings/graphwave-barbell.nblink +++ /dev/null @@ -1,3 +0,0 @@ -{ - "path": "../../../demos/embeddings/graphwave-barbell.ipynb" -} diff --git a/docs/demos/embeddings/graphwave-embeddings.nblink b/docs/demos/embeddings/graphwave-embeddings.nblink new file mode 100644 index 000000000..f196b23c1 --- /dev/null +++ b/docs/demos/embeddings/graphwave-embeddings.nblink @@ -0,0 +1,3 @@ +{ + "path": "../../../demos/embeddings/graphwave-embeddings.ipynb" +} diff --git a/docs/demos/embeddings/metapath2vec-embeddings.nblink b/docs/demos/embeddings/metapath2vec-embeddings.nblink new file mode 100644 index 000000000..baddb61ef --- /dev/null +++ b/docs/demos/embeddings/metapath2vec-embeddings.nblink @@ -0,0 +1,3 @@ +{ + "path": "../../../demos/embeddings/metapath2vec-embeddings.ipynb" +} diff --git a/docs/demos/embeddings/node2vec-embeddings.nblink b/docs/demos/embeddings/node2vec-embeddings.nblink new file mode 100644 index 000000000..53468c7d0 --- /dev/null +++ b/docs/demos/embeddings/node2vec-embeddings.nblink @@ -0,0 +1,3 @@ +{ + "path": "../../../demos/embeddings/node2vec-embeddings.ipynb" +} diff --git a/docs/demos/embeddings/stellargraph-attri2vec-citeseer.nblink b/docs/demos/embeddings/stellargraph-attri2vec-citeseer.nblink deleted file mode 100644 index 4f7c2b0b3..000000000 --- a/docs/demos/embeddings/stellargraph-attri2vec-citeseer.nblink +++ /dev/null @@ -1,3 +0,0 @@ -{ - "path": "../../../demos/embeddings/stellargraph-attri2vec-citeseer.ipynb" -} diff --git a/docs/demos/embeddings/stellargraph-metapath2vec.nblink b/docs/demos/embeddings/stellargraph-metapath2vec.nblink deleted file mode 100644 index 61519c380..000000000 --- a/docs/demos/embeddings/stellargraph-metapath2vec.nblink +++ /dev/null @@ -1,3 +0,0 @@ -{ - "path": "../../../demos/embeddings/stellargraph-metapath2vec.ipynb" -} diff --git a/docs/demos/embeddings/stellargraph-node2vec.nblink b/docs/demos/embeddings/stellargraph-node2vec.nblink deleted file mode 100644 index 3ead5a990..000000000 --- a/docs/demos/embeddings/stellargraph-node2vec.nblink +++ /dev/null @@ -1,3 +0,0 @@ -{ - "path": "../../../demos/embeddings/stellargraph-node2vec.ipynb" -} diff --git a/docs/demos/embeddings/watch-your-step-cora-demo.nblink b/docs/demos/embeddings/watch-your-step-cora-demo.nblink deleted file mode 100644 index aba5c0558..000000000 --- a/docs/demos/embeddings/watch-your-step-cora-demo.nblink +++ /dev/null @@ -1,3 +0,0 @@ -{ - "path": "../../../demos/embeddings/watch-your-step-cora-demo.ipynb" -} diff --git a/docs/demos/embeddings/watch-your-step-embeddings.nblink b/docs/demos/embeddings/watch-your-step-embeddings.nblink new file mode 100644 index 000000000..81ee05b5d --- /dev/null +++ b/docs/demos/embeddings/watch-your-step-embeddings.nblink @@ -0,0 +1,3 @@ +{ + "path": "../../../demos/embeddings/watch-your-step-embeddings.ipynb" +} diff --git a/docs/demos/graph-classification/gcn-supervised-graph-classification.nblink b/docs/demos/graph-classification/gcn-supervised-graph-classification.nblink new file mode 100644 index 000000000..3ab6d84fc --- /dev/null +++ b/docs/demos/graph-classification/gcn-supervised-graph-classification.nblink @@ -0,0 +1,3 @@ +{ + "path": "../../../demos/graph-classification/gcn-supervised-graph-classification.ipynb" +} diff --git a/docs/demos/graph-classification/supervised-graph-classification.nblink b/docs/demos/graph-classification/supervised-graph-classification.nblink deleted file mode 100644 index d7538b6df..000000000 --- a/docs/demos/graph-classification/supervised-graph-classification.nblink +++ /dev/null @@ -1,3 +0,0 @@ -{ - "path": "../../../demos/graph-classification/supervised-graph-classification.ipynb" -} diff --git a/docs/demos/index.txt b/docs/demos/index.txt index d558a2516..d7ce73c50 100644 --- a/docs/demos/index.txt +++ b/docs/demos/index.txt @@ -59,11 +59,11 @@ Find a demo for an algorithm - - see T-GCN - yes - - :any:`demo ` - - :any:`demo ` - - UnsupervisedSampler, :any:`DeepGraphInfomax ` + - :any:`demo ` + - :any:`demo ` + - UnsupervisedSampler, :any:`DeepGraphInfomax ` - see Cluster-GCN - - :any:`demo ` + - :any:`demo ` * - Cluster-GCN - @@ -71,7 +71,7 @@ Find a demo for an algorithm - - - yes - - :any:`demo ` + - :any:`demo ` - yes - - yes @@ -83,7 +83,7 @@ Find a demo for an algorithm - - - yes - - :any:`demo ` + - :any:`demo ` - yes - - @@ -95,7 +95,7 @@ Find a demo for an algorithm - - node features - time series, sequence - - :any:`demo ` + - :any:`demo ` - - - @@ -107,9 +107,9 @@ Find a demo for an algorithm - - - yes - - :any:`demo ` + - :any:`demo ` - yes - - UnsupervisedSampler, :any:`DeepGraphInfomax ` + - UnsupervisedSampler, :any:`DeepGraphInfomax ` - - * @@ -119,7 +119,7 @@ Find a demo for an algorithm - - - yes - - :any:`demo ` + - :any:`demo ` - yes - - @@ -131,7 +131,7 @@ Find a demo for an algorithm - - - yes - - :any:`demo ` + - :any:`demo ` - yes - UnsupervisedSampler, DeepGraphInfomax - @@ -143,9 +143,9 @@ Find a demo for an algorithm - - - yes - - :any:`demo ` + - :any:`demo ` - yes - - UnsupervisedSampler, :any:`DeepGraphInfomax ` + - UnsupervisedSampler, :any:`DeepGraphInfomax ` - - * @@ -157,7 +157,7 @@ Find a demo for an algorithm - - via embedding vectors - via embedding vectors - - :any:`demo ` + - :any:`demo ` - - * @@ -167,22 +167,22 @@ Find a demo for an algorithm - - - yes - - :any:`demo ` - - :any:`demo ` - - :any:`demo ` + - :any:`demo ` + - :any:`demo ` + - :any:`demo ` - - * - GraphSAGE - see HinSAGE - - :any:`demo ` + - :any:`demo ` - - - yes - - :any:`demo ` - - :any:`demo ` - - :any:`UnsupervisedSampler `, :any:`DeepGraphInfomax ` - - :any:`demo ` + - :any:`demo ` + - :any:`demo ` + - :any:`UnsupervisedSampler `, :any:`DeepGraphInfomax ` + - :any:`demo ` - * - HinSAGE @@ -192,20 +192,20 @@ Find a demo for an algorithm - - yes - yes - - :any:`demo ` - - :any:`DeepGraphInfomax ` + - :any:`demo ` + - :any:`DeepGraphInfomax ` - yes - * - Node2Vec - - - - :any:`demo ` + - :any:`demo ` - - - - :any:`via embedding vectors ` - - :any:`via embedding vectors ` - - :any:`demo ` + - :any:`via embedding vectors ` + - :any:`via embedding vectors ` + - :any:`demo ` - - * @@ -217,7 +217,7 @@ Find a demo for an algorithm - - via embedding vectors - via embedding vectors - - :any:`demo ` + - :any:`demo ` - - * @@ -228,7 +228,7 @@ Find a demo for an algorithm - yes - - via embedding vectors - - :any:`via embedding vectors ` + - :any:`via embedding vectors ` - yes - - @@ -239,9 +239,9 @@ Find a demo for an algorithm - - - - - :any:`via embedding vectors ` + - :any:`via embedding vectors ` - via embedding vectors - - :any:`demo ` + - :any:`demo ` - - * @@ -252,7 +252,7 @@ Find a demo for an algorithm - - - via embedding vectors - - :any:`demo ` + - :any:`demo ` - yes - - @@ -264,7 +264,7 @@ Find a demo for an algorithm - - - via embedding vectors - - :any:`demo ` + - :any:`demo ` - yes - - diff --git a/docs/demos/interpretability/gat-cora-node-link-importance.nblink b/docs/demos/interpretability/gat-cora-node-link-importance.nblink new file mode 100644 index 000000000..ebc6066eb --- /dev/null +++ b/docs/demos/interpretability/gat-cora-node-link-importance.nblink @@ -0,0 +1,3 @@ +{ + "path": "../../../demos/interpretability/gat-cora-node-link-importance.ipynb" +} diff --git a/docs/demos/interpretability/gat/node-link-importance-demo-gat.nblink b/docs/demos/interpretability/gat/node-link-importance-demo-gat.nblink deleted file mode 100644 index fb79616cb..000000000 --- a/docs/demos/interpretability/gat/node-link-importance-demo-gat.nblink +++ /dev/null @@ -1,3 +0,0 @@ -{ - "path": "../../../../demos/interpretability/gat/node-link-importance-demo-gat.ipynb" -} diff --git a/docs/demos/interpretability/gcn-cora-node-link-importance.nblink b/docs/demos/interpretability/gcn-cora-node-link-importance.nblink new file mode 100644 index 000000000..bc81c442c --- /dev/null +++ b/docs/demos/interpretability/gcn-cora-node-link-importance.nblink @@ -0,0 +1,3 @@ +{ + "path": "../../../demos/interpretability/gcn-cora-node-link-importance.ipynb" +} diff --git a/docs/demos/interpretability/gcn-sparse-cora-node-link-importance.nblink b/docs/demos/interpretability/gcn-sparse-cora-node-link-importance.nblink new file mode 100644 index 000000000..5ac14dd78 --- /dev/null +++ b/docs/demos/interpretability/gcn-sparse-cora-node-link-importance.nblink @@ -0,0 +1,3 @@ +{ + "path": "../../../demos/interpretability/gcn-sparse-cora-node-link-importance.ipynb" +} diff --git a/docs/demos/interpretability/gcn/hateful-twitters-interpretability.nblink b/docs/demos/interpretability/gcn/hateful-twitters-interpretability.nblink deleted file mode 100644 index 2b1a37eb3..000000000 --- a/docs/demos/interpretability/gcn/hateful-twitters-interpretability.nblink +++ /dev/null @@ -1,3 +0,0 @@ -{ - "path": "../../../../demos/interpretability/gcn/hateful-twitters-interpretability.ipynb" -} diff --git a/docs/demos/interpretability/gcn/node-link-importance-demo-gcn-sparse.nblink b/docs/demos/interpretability/gcn/node-link-importance-demo-gcn-sparse.nblink deleted file mode 100644 index cdb30a8fd..000000000 --- a/docs/demos/interpretability/gcn/node-link-importance-demo-gcn-sparse.nblink +++ /dev/null @@ -1,3 +0,0 @@ -{ - "path": "../../../../demos/interpretability/gcn/node-link-importance-demo-gcn-sparse.ipynb" -} diff --git a/docs/demos/interpretability/gcn/node-link-importance-demo-gcn.nblink b/docs/demos/interpretability/gcn/node-link-importance-demo-gcn.nblink deleted file mode 100644 index c14b7aaac..000000000 --- a/docs/demos/interpretability/gcn/node-link-importance-demo-gcn.nblink +++ /dev/null @@ -1,3 +0,0 @@ -{ - "path": "../../../../demos/interpretability/gcn/node-link-importance-demo-gcn.ipynb" -} diff --git a/docs/demos/interpretability/hateful-twitters-interpretability.nblink b/docs/demos/interpretability/hateful-twitters-interpretability.nblink new file mode 100644 index 000000000..d664494af --- /dev/null +++ b/docs/demos/interpretability/hateful-twitters-interpretability.nblink @@ -0,0 +1,3 @@ +{ + "path": "../../../demos/interpretability/hateful-twitters-interpretability.ipynb" +} diff --git a/docs/demos/link-prediction/attri2vec-link-prediction.nblink b/docs/demos/link-prediction/attri2vec-link-prediction.nblink new file mode 100644 index 000000000..a894128f9 --- /dev/null +++ b/docs/demos/link-prediction/attri2vec-link-prediction.nblink @@ -0,0 +1,3 @@ +{ + "path": "../../../demos/link-prediction/attri2vec-link-prediction.ipynb" +} diff --git a/docs/demos/link-prediction/attri2vec/stellargraph-attri2vec-DBLP.nblink b/docs/demos/link-prediction/attri2vec/stellargraph-attri2vec-DBLP.nblink deleted file mode 100644 index 59411adb7..000000000 --- a/docs/demos/link-prediction/attri2vec/stellargraph-attri2vec-DBLP.nblink +++ /dev/null @@ -1,3 +0,0 @@ -{ - "path": "../../../../demos/link-prediction/attri2vec/stellargraph-attri2vec-DBLP.ipynb" -} diff --git a/docs/demos/link-prediction/complex-link-prediction.nblink b/docs/demos/link-prediction/complex-link-prediction.nblink new file mode 100644 index 000000000..410189d6e --- /dev/null +++ b/docs/demos/link-prediction/complex-link-prediction.nblink @@ -0,0 +1,3 @@ +{ + "path": "../../../demos/link-prediction/complex-link-prediction.ipynb" +} diff --git a/docs/demos/link-prediction/ctdne-link-prediction.nblink b/docs/demos/link-prediction/ctdne-link-prediction.nblink new file mode 100644 index 000000000..08b16e2e1 --- /dev/null +++ b/docs/demos/link-prediction/ctdne-link-prediction.nblink @@ -0,0 +1,3 @@ +{ + "path": "../../../demos/link-prediction/ctdne-link-prediction.ipynb" +} diff --git a/docs/demos/link-prediction/distmult-link-prediction.nblink b/docs/demos/link-prediction/distmult-link-prediction.nblink new file mode 100644 index 000000000..aba0bd126 --- /dev/null +++ b/docs/demos/link-prediction/distmult-link-prediction.nblink @@ -0,0 +1,3 @@ +{ + "path": "../../../demos/link-prediction/distmult-link-prediction.ipynb" +} diff --git a/docs/demos/link-prediction/gcn-link-prediction.nblink b/docs/demos/link-prediction/gcn-link-prediction.nblink new file mode 100644 index 000000000..ed82283c9 --- /dev/null +++ b/docs/demos/link-prediction/gcn-link-prediction.nblink @@ -0,0 +1,3 @@ +{ + "path": "../../../demos/link-prediction/gcn-link-prediction.ipynb" +} diff --git a/docs/demos/link-prediction/gcn/cora-gcn-links-example.nblink b/docs/demos/link-prediction/gcn/cora-gcn-links-example.nblink deleted file mode 100644 index a2da01bf0..000000000 --- a/docs/demos/link-prediction/gcn/cora-gcn-links-example.nblink +++ /dev/null @@ -1,3 +0,0 @@ -{ - "path": "../../../../demos/link-prediction/gcn/cora-gcn-links-example.ipynb" -} diff --git a/docs/demos/link-prediction/graphsage-link-prediction.nblink b/docs/demos/link-prediction/graphsage-link-prediction.nblink new file mode 100644 index 000000000..9f7037d90 --- /dev/null +++ b/docs/demos/link-prediction/graphsage-link-prediction.nblink @@ -0,0 +1,3 @@ +{ + "path": "../../../demos/link-prediction/graphsage-link-prediction.ipynb" +} diff --git a/docs/demos/link-prediction/graphsage/cora-links-example.nblink b/docs/demos/link-prediction/graphsage/cora-links-example.nblink deleted file mode 100644 index f26177e54..000000000 --- a/docs/demos/link-prediction/graphsage/cora-links-example.nblink +++ /dev/null @@ -1,3 +0,0 @@ -{ - "path": "../../../../demos/link-prediction/graphsage/cora-links-example.ipynb" -} diff --git a/docs/demos/link-prediction/hinsage-link-prediction.nblink b/docs/demos/link-prediction/hinsage-link-prediction.nblink new file mode 100644 index 000000000..278b461b5 --- /dev/null +++ b/docs/demos/link-prediction/hinsage-link-prediction.nblink @@ -0,0 +1,3 @@ +{ + "path": "../../../demos/link-prediction/hinsage-link-prediction.ipynb" +} diff --git a/docs/demos/link-prediction/hinsage/movielens-recommender.nblink b/docs/demos/link-prediction/hinsage/movielens-recommender.nblink deleted file mode 100644 index 60ee61bb6..000000000 --- a/docs/demos/link-prediction/hinsage/movielens-recommender.nblink +++ /dev/null @@ -1,3 +0,0 @@ -{ - "path": "../../../../demos/link-prediction/hinsage/movielens-recommender.ipynb" -} diff --git a/docs/demos/link-prediction/knowledge-graphs/complex.nblink b/docs/demos/link-prediction/knowledge-graphs/complex.nblink deleted file mode 100644 index 9de08ceae..000000000 --- a/docs/demos/link-prediction/knowledge-graphs/complex.nblink +++ /dev/null @@ -1,3 +0,0 @@ -{ - "path": "../../../../demos/link-prediction/knowledge-graphs/complex.ipynb" -} diff --git a/docs/demos/link-prediction/knowledge-graphs/distmult.nblink b/docs/demos/link-prediction/knowledge-graphs/distmult.nblink deleted file mode 100644 index 9009bb7cb..000000000 --- a/docs/demos/link-prediction/knowledge-graphs/distmult.nblink +++ /dev/null @@ -1,3 +0,0 @@ -{ - "path": "../../../../demos/link-prediction/knowledge-graphs/distmult.ipynb" -} diff --git a/docs/demos/link-prediction/node2vec-link-prediction.nblink b/docs/demos/link-prediction/node2vec-link-prediction.nblink new file mode 100644 index 000000000..e3eee975f --- /dev/null +++ b/docs/demos/link-prediction/node2vec-link-prediction.nblink @@ -0,0 +1,3 @@ +{ + "path": "../../../demos/link-prediction/node2vec-link-prediction.ipynb" +} diff --git a/docs/demos/link-prediction/random-walks/cora-lp-demo.nblink b/docs/demos/link-prediction/random-walks/cora-lp-demo.nblink deleted file mode 100644 index 6ec6b0e7b..000000000 --- a/docs/demos/link-prediction/random-walks/cora-lp-demo.nblink +++ /dev/null @@ -1,3 +0,0 @@ -{ - "path": "../../../../demos/link-prediction/random-walks/cora-lp-demo.ipynb" -} diff --git a/docs/demos/link-prediction/random-walks/ctdne-link-prediction.nblink b/docs/demos/link-prediction/random-walks/ctdne-link-prediction.nblink deleted file mode 100644 index da0dcba73..000000000 --- a/docs/demos/link-prediction/random-walks/ctdne-link-prediction.nblink +++ /dev/null @@ -1,3 +0,0 @@ -{ - "path": "../../../../demos/link-prediction/random-walks/ctdne-link-prediction.ipynb" -} diff --git a/docs/demos/node-classification/attri2vec-node-classification.nblink b/docs/demos/node-classification/attri2vec-node-classification.nblink new file mode 100644 index 000000000..4e38b1b59 --- /dev/null +++ b/docs/demos/node-classification/attri2vec-node-classification.nblink @@ -0,0 +1,3 @@ +{ + "path": "../../../demos/node-classification/attri2vec-node-classification.ipynb" +} diff --git a/docs/demos/node-classification/attri2vec/attri2vec-citeseer-node-classification-example.nblink b/docs/demos/node-classification/attri2vec/attri2vec-citeseer-node-classification-example.nblink deleted file mode 100644 index 3e405738e..000000000 --- a/docs/demos/node-classification/attri2vec/attri2vec-citeseer-node-classification-example.nblink +++ /dev/null @@ -1,3 +0,0 @@ -{ - "path": "../../../../demos/node-classification/attri2vec/attri2vec-citeseer-node-classification-example.ipynb" -} diff --git a/docs/demos/node-classification/cluster-gcn-node-classification.nblink b/docs/demos/node-classification/cluster-gcn-node-classification.nblink new file mode 100644 index 000000000..c07ced0f0 --- /dev/null +++ b/docs/demos/node-classification/cluster-gcn-node-classification.nblink @@ -0,0 +1,3 @@ +{ + "path": "../../../demos/node-classification/cluster-gcn-node-classification.ipynb" +} diff --git a/docs/demos/node-classification/cluster-gcn/cluster-gcn-node-classification.nblink b/docs/demos/node-classification/cluster-gcn/cluster-gcn-node-classification.nblink deleted file mode 100644 index e5a95819e..000000000 --- a/docs/demos/node-classification/cluster-gcn/cluster-gcn-node-classification.nblink +++ /dev/null @@ -1,3 +0,0 @@ -{ - "path": "../../../../demos/node-classification/cluster-gcn/cluster-gcn-node-classification.ipynb" -} diff --git a/docs/demos/node-classification/directed-graphsage-node-classification.nblink b/docs/demos/node-classification/directed-graphsage-node-classification.nblink new file mode 100644 index 000000000..7dc2e8850 --- /dev/null +++ b/docs/demos/node-classification/directed-graphsage-node-classification.nblink @@ -0,0 +1,3 @@ +{ + "path": "../../../demos/node-classification/directed-graphsage-node-classification.ipynb" +} diff --git a/docs/demos/node-classification/gat-node-classification.nblink b/docs/demos/node-classification/gat-node-classification.nblink new file mode 100644 index 000000000..cbf352280 --- /dev/null +++ b/docs/demos/node-classification/gat-node-classification.nblink @@ -0,0 +1,3 @@ +{ + "path": "../../../demos/node-classification/gat-node-classification.ipynb" +} diff --git a/docs/demos/node-classification/gat/gat-cora-node-classification-example.nblink b/docs/demos/node-classification/gat/gat-cora-node-classification-example.nblink deleted file mode 100644 index 07f6e5da9..000000000 --- a/docs/demos/node-classification/gat/gat-cora-node-classification-example.nblink +++ /dev/null @@ -1,3 +0,0 @@ -{ - "path": "../../../../demos/node-classification/gat/gat-cora-node-classification-example.ipynb" -} diff --git a/docs/demos/node-classification/gcn-node-classification.nblink b/docs/demos/node-classification/gcn-node-classification.nblink new file mode 100644 index 000000000..5455a8ec7 --- /dev/null +++ b/docs/demos/node-classification/gcn-node-classification.nblink @@ -0,0 +1,3 @@ +{ + "path": "../../../demos/node-classification/gcn-node-classification.ipynb" +} diff --git a/docs/demos/node-classification/gcn/gcn-cora-node-classification-example.nblink b/docs/demos/node-classification/gcn/gcn-cora-node-classification-example.nblink deleted file mode 100644 index e77f8a26c..000000000 --- a/docs/demos/node-classification/gcn/gcn-cora-node-classification-example.nblink +++ /dev/null @@ -1,3 +0,0 @@ -{ - "path": "../../../../demos/node-classification/gcn/gcn-cora-node-classification-example.ipynb" -} diff --git a/docs/demos/node-classification/graphsage-inductive-node-classification.nblink b/docs/demos/node-classification/graphsage-inductive-node-classification.nblink new file mode 100644 index 000000000..c38fd278c --- /dev/null +++ b/docs/demos/node-classification/graphsage-inductive-node-classification.nblink @@ -0,0 +1,3 @@ +{ + "path": "../../../demos/node-classification/graphsage-inductive-node-classification.ipynb" +} diff --git a/docs/demos/node-classification/graphsage-node-classification.nblink b/docs/demos/node-classification/graphsage-node-classification.nblink new file mode 100644 index 000000000..a3e1a7654 --- /dev/null +++ b/docs/demos/node-classification/graphsage-node-classification.nblink @@ -0,0 +1,3 @@ +{ + "path": "../../../demos/node-classification/graphsage-node-classification.ipynb" +} diff --git a/docs/demos/node-classification/graphsage/directed-graphsage-on-cora-example.nblink b/docs/demos/node-classification/graphsage/directed-graphsage-on-cora-example.nblink deleted file mode 100644 index 27d3fe257..000000000 --- a/docs/demos/node-classification/graphsage/directed-graphsage-on-cora-example.nblink +++ /dev/null @@ -1,3 +0,0 @@ -{ - "path": "../../../../demos/node-classification/graphsage/directed-graphsage-on-cora-example.ipynb" -} diff --git a/docs/demos/node-classification/graphsage/graphsage-cora-node-classification-example.nblink b/docs/demos/node-classification/graphsage/graphsage-cora-node-classification-example.nblink deleted file mode 100644 index 4a77c2281..000000000 --- a/docs/demos/node-classification/graphsage/graphsage-cora-node-classification-example.nblink +++ /dev/null @@ -1,3 +0,0 @@ -{ - "path": "../../../../demos/node-classification/graphsage/graphsage-cora-node-classification-example.ipynb" -} diff --git a/docs/demos/node-classification/graphsage/graphsage-pubmed-inductive-node-classification-example.nblink b/docs/demos/node-classification/graphsage/graphsage-pubmed-inductive-node-classification-example.nblink deleted file mode 100644 index a9d4c26c6..000000000 --- a/docs/demos/node-classification/graphsage/graphsage-pubmed-inductive-node-classification-example.nblink +++ /dev/null @@ -1,3 +0,0 @@ -{ - "path": "../../../../demos/node-classification/graphsage/graphsage-pubmed-inductive-node-classification-example.ipynb" -} diff --git a/docs/demos/node-classification/node2vec-node-classification.nblink b/docs/demos/node-classification/node2vec-node-classification.nblink new file mode 100644 index 000000000..8d4946e48 --- /dev/null +++ b/docs/demos/node-classification/node2vec-node-classification.nblink @@ -0,0 +1,3 @@ +{ + "path": "../../../demos/node-classification/node2vec-node-classification.ipynb" +} diff --git a/docs/demos/node-classification/node2vec-weighted-node-classification.nblink b/docs/demos/node-classification/node2vec-weighted-node-classification.nblink new file mode 100644 index 000000000..7a0889bd1 --- /dev/null +++ b/docs/demos/node-classification/node2vec-weighted-node-classification.nblink @@ -0,0 +1,3 @@ +{ + "path": "../../../demos/node-classification/node2vec-weighted-node-classification.ipynb" +} diff --git a/docs/demos/node-classification/node2vec/stellargraph-node2vec-node-classification.nblink b/docs/demos/node-classification/node2vec/stellargraph-node2vec-node-classification.nblink deleted file mode 100644 index aaf14f892..000000000 --- a/docs/demos/node-classification/node2vec/stellargraph-node2vec-node-classification.nblink +++ /dev/null @@ -1,3 +0,0 @@ -{ - "path": "../../../../demos/node-classification/node2vec/stellargraph-node2vec-node-classification.ipynb" -} diff --git a/docs/demos/node-classification/node2vec/stellargraph-node2vec-weighted-random-walks.nblink b/docs/demos/node-classification/node2vec/stellargraph-node2vec-weighted-random-walks.nblink deleted file mode 100644 index 4d77d74c9..000000000 --- a/docs/demos/node-classification/node2vec/stellargraph-node2vec-weighted-random-walks.nblink +++ /dev/null @@ -1,3 +0,0 @@ -{ - "path": "../../../../demos/node-classification/node2vec/stellargraph-node2vec-weighted-random-walks.ipynb" -} diff --git a/docs/demos/node-classification/ppnp-node-classification.nblink b/docs/demos/node-classification/ppnp-node-classification.nblink new file mode 100644 index 000000000..1f607a474 --- /dev/null +++ b/docs/demos/node-classification/ppnp-node-classification.nblink @@ -0,0 +1,3 @@ +{ + "path": "../../../demos/node-classification/ppnp-node-classification.ipynb" +} diff --git a/docs/demos/node-classification/ppnp/ppnp-cora-node-classification-example.nblink b/docs/demos/node-classification/ppnp/ppnp-cora-node-classification-example.nblink deleted file mode 100644 index a2f8cc231..000000000 --- a/docs/demos/node-classification/ppnp/ppnp-cora-node-classification-example.nblink +++ /dev/null @@ -1,3 +0,0 @@ -{ - "path": "../../../../demos/node-classification/ppnp/ppnp-cora-node-classification-example.ipynb" -} diff --git a/docs/demos/node-classification/rgcn-node-classification.nblink b/docs/demos/node-classification/rgcn-node-classification.nblink new file mode 100644 index 000000000..ffaba0232 --- /dev/null +++ b/docs/demos/node-classification/rgcn-node-classification.nblink @@ -0,0 +1,3 @@ +{ + "path": "../../../demos/node-classification/rgcn-node-classification.ipynb" +} diff --git a/docs/demos/node-classification/rgcn/rgcn-aifb-node-classification-example.nblink b/docs/demos/node-classification/rgcn/rgcn-aifb-node-classification-example.nblink deleted file mode 100644 index eec39bd47..000000000 --- a/docs/demos/node-classification/rgcn/rgcn-aifb-node-classification-example.nblink +++ /dev/null @@ -1,3 +0,0 @@ -{ - "path": "../../../../demos/node-classification/rgcn/rgcn-aifb-node-classification-example.ipynb" -} diff --git a/docs/demos/node-classification/sgc-node-classification.nblink b/docs/demos/node-classification/sgc-node-classification.nblink new file mode 100644 index 000000000..e965e0086 --- /dev/null +++ b/docs/demos/node-classification/sgc-node-classification.nblink @@ -0,0 +1,3 @@ +{ + "path": "../../../demos/node-classification/sgc-node-classification.ipynb" +} diff --git a/docs/demos/node-classification/sgc/sgc-node-classification-example.nblink b/docs/demos/node-classification/sgc/sgc-node-classification-example.nblink deleted file mode 100644 index b05227975..000000000 --- a/docs/demos/node-classification/sgc/sgc-node-classification-example.nblink +++ /dev/null @@ -1,3 +0,0 @@ -{ - "path": "../../../../demos/node-classification/sgc/sgc-node-classification-example.ipynb" -} diff --git a/docs/demos/time-series/gcn-lstm-LA.nblink b/docs/demos/time-series/gcn-lstm-LA.nblink deleted file mode 100644 index 35a794f76..000000000 --- a/docs/demos/time-series/gcn-lstm-LA.nblink +++ /dev/null @@ -1,3 +0,0 @@ -{ - "path": "../../../demos/time-series/gcn-lstm-LA.ipynb" -} diff --git a/docs/demos/time-series/gcn-lstm-time-series.nblink b/docs/demos/time-series/gcn-lstm-time-series.nblink new file mode 100644 index 000000000..1ac5a1e8c --- /dev/null +++ b/docs/demos/time-series/gcn-lstm-time-series.nblink @@ -0,0 +1,3 @@ +{ + "path": "../../../demos/time-series/gcn-lstm-time-series.ipynb" +} diff --git a/scripts/demo_table.py b/scripts/demo_table.py index dfcbf70d5..a16e1e4e7 100644 --- a/scripts/demo_table.py +++ b/scripts/demo_table.py @@ -347,7 +347,7 @@ def rl_us(link=None): return T("US", link=link, details="UnsupervisedSampler") -def rl_dgi(link="embeddings/deep-graph-infomax-cora"): +def rl_dgi(link="embeddings/deep-graph-infomax-embeddings"): return T("DGI", link=link, details="DeepGraphInfomax") @@ -361,19 +361,19 @@ def via_rl(link=None): heterogeneous="see RGCN", features=True, temporal="see T-GCN", - nc=T(link="node-classification/gcn/gcn-cora-node-classification-example"), + nc=T(link="node-classification/gcn-node-classification"), interpretability_nc=T( - link="interpretability/gcn/node-link-importance-demo-gcn" + link="interpretability/gcn-node-link-importance" ), - lp=T(link="link-prediction/gcn/cora-gcn-links-example"), + lp=T(link="link-prediction/gcn-link-prediction"), rl=[rl_us(), rl_dgi()], inductive="see Cluster-GCN", - gc=T(link="graph-classification/supervised-graph-classification"), + gc=T(link="graph-classification/gcn-supervised-graph-classification"), ), Algorithm( "Cluster-GCN", features=True, - nc=T(link="node-classification/cluster-gcn/cluster-gcn-node-classification"), + nc=T(link="node-classification/cluster-gcn-node-classification"), lp=True, inductive=True, ), @@ -381,21 +381,21 @@ def via_rl(link=None): T("RGCN", details="Relational GCN (RGCN)"), heterogeneous=HETEROGENEOUS_EDGE, features=True, - nc=T(link="node-classification/rgcn/rgcn-aifb-node-classification-example"), + nc=T(link="node-classification/rgcn-node-classification"), lp=True, ), Algorithm( T("T-GCN", details="Temporal GCN (T-GCN), implemented as GCN-LSTM"), features="time series, sequence", temporal="node features", - nc=T(link="time-series/gcn-lstm-LA"), + nc=T(link="time-series/gcn-lstm-time-series"), ), Algorithm( T("GAT", details="Graph ATtention Network (GAT)"), features=True, - nc=T(link="node-classification/gat/gat-cora-node-classification-example"), + nc=T(link="node-classification/gat-node-classification"), interpretability_nc=T( - link="interpretability/gat/node-link-importance-demo-gat.ipynb" + link="interpretability/gat-node-link-importance" ), lp=True, rl=[rl_us(), rl_dgi()], @@ -403,20 +403,20 @@ def via_rl(link=None): Algorithm( T("SGC", details="Simplified Graph Convolution (SGC)"), features=True, - nc=T(link="node-classification/sgc/sgc-node-classification-example"), + nc=T(link="node-classification/sgc-node-classification"), lp=True, ), Algorithm( T("PPNP", details="Personalized Propagation of Neural Predictions (PPNP)"), features=True, - nc=T(link="node-classification/ppnp/ppnp-cora-node-classification-example"), + nc=T(link="node-classification/ppnp-node-classification"), lp=True, rl=[rl_us(), rl_dgi(link=None)], ), Algorithm( T("APPNP", details="Approximate PPNP (APPNP)"), features=True, - nc=T(link="node-classification/ppnp/ppnp-cora-node-classification-example"), + nc=T(link="node-classification/ppnp-node-classification"), lp=True, rl=[rl_us(), rl_dgi()], ), @@ -424,31 +424,31 @@ def via_rl(link=None): "GraphWave", nc=via_rl(), lp=via_rl(), - rl=T(link="embeddings/graphwave-barbell"), + rl=T(link="embeddings/graphwave-embeddings"), ), Algorithm( "Attri2Vec", features=True, nc=T( - link="node-classification/attri2vec/attri2vec-citeseer-node-classification-example" + link="node-classification/attri2vec-node-classification" ), - lp=T(link="link-prediction/attri2vec/stellargraph-attri2vec-DBLP"), - rl=T(link="embeddings/stellargraph-attri2vec-citeseer"), + lp=T(link="link-prediction/attri2vec-link-prediction"), + rl=T(link="embeddings/attri2vec-embeddings"), ), Algorithm( "GraphSAGE", heterogeneous="see HinSAGE", directed=T( - link="node-classification/graphsage/directed-graphsage-on-cora-example" + link="node-classification/directed-graphsage-node-classification" ), features=True, nc=T( - link="node-classification/graphsage/graphsage-cora-node-classification-example" + link="node-classification/graphsage-node-classification" ), - lp=T(link="link-prediction/graphsage/cora-links-example"), - rl=[rl_us(link="embeddings/embeddings-unsupervised-graphsage-cora"), rl_dgi()], + lp=T(link="link-prediction/graphsage-link-prediction"), + rl=[rl_us(link="embeddings/graphsage-unsupervised-sampler-embeddings"), rl_dgi()], inductive=T( - link="node-classification/graphsage/graphsage-pubmed-inductive-node-classification-example" + link="node-classification/graphsage-inductive-node-classification" ), ), Algorithm( @@ -456,47 +456,47 @@ def via_rl(link=None): heterogeneous=True, features=True, nc=True, - lp=T(link="link-prediction/hinsage/movielens-recommender"), + lp=T(link="link-prediction/hinsage-link-prediction"), rl=rl_dgi(), inductive=True, ), Algorithm( "Node2Vec", weighted=T( - link="node-classification/node2vec/stellargraph-node2vec-weighted-random-walks" + link="node-classification/node2vec-weighted-node-classification" ), nc=via_rl( - link="node-classification/node2vec/stellargraph-node2vec-node-classification" + link="node-classification/node2vec-node-classification" ), - lp=via_rl(link="link-prediction/random-walks/cora-lp-demo"), - rl=T(link="embeddings/stellargraph-node2vec"), + lp=via_rl(link="link-prediction/node2vec-link-prediction"), + rl=T(link="embeddings/node2vec-embeddings"), ), Algorithm( "Metapath2Vec", heterogeneous=True, nc=via_rl(), lp=via_rl(), - rl=T(link="embeddings/stellargraph-metapath2vec"), + rl=T(link="embeddings/metapath2vec-embeddings"), ), Algorithm( T("CTDNE", details="Continuous-Time Dynamic Network Embeddings"), temporal=True, nc=via_rl(), - lp=via_rl(link="link-prediction/random-walks/ctdne-link-prediction"), + lp=via_rl(link="link-prediction/ctdne-link-prediction"), rl=True, ), Algorithm( "Watch Your Step", - nc=via_rl(link="embeddings/watch-your-step-cora-demo"), + nc=via_rl(link="embeddings/watch-your-step-embeddings"), lp=via_rl(), - rl=T(link="embeddings/watch-your-step-cora-demo"), + rl=T(link="embeddings/watch-your-step-embeddings"), ), Algorithm( "ComplEx", heterogeneous=HETEROGENEOUS_EDGE, directed=True, nc=via_rl(), - lp=T(link="link-prediction/knowledge-graphs/complex"), + lp=T(link="link-prediction/complex-link-prediction"), rl=True, ), Algorithm( @@ -504,7 +504,7 @@ def via_rl(link=None): heterogeneous=HETEROGENEOUS_EDGE, directed=True, nc=via_rl(), - lp=T(link="link-prediction/knowledge-graphs/distmult"), + lp=T(link="link-prediction/distmult-link-prediction"), rl=True, ), ] From 67e539f05bbcbeea2a0161f086153c93a41d7d76 Mon Sep 17 00:00:00 2001 From: Huon Wilson Date: Mon, 4 May 2020 18:03:25 +1000 Subject: [PATCH 20/43] Update demos --- demos/embeddings/attri2vec-embeddings.ipynb | 4 ++-- demos/embeddings/deep-graph-infomax-embeddings.ipynb | 4 ++-- .../graphsage-unsupervised-sampler-embeddings.ipynb | 4 ++-- demos/embeddings/graphwave-embeddings.ipynb | 4 ++-- demos/embeddings/metapath2vec-embeddings.ipynb | 4 ++-- demos/embeddings/node2vec-embeddings.ipynb | 4 ++-- demos/embeddings/watch-your-step-embeddings.ipynb | 4 ++-- .../gcn-supervised-graph-classification.ipynb | 4 ++-- demos/interpretability/gat-cora-node-link-importance.ipynb | 4 ++-- demos/interpretability/gcn-cora-node-link-importance.ipynb | 4 ++-- .../gcn-sparse-cora-node-link-importance.ipynb | 4 ++-- .../interpretability/hateful-twitters-interpretability.ipynb | 4 ++-- demos/link-prediction/attri2vec-link-prediction.ipynb | 4 ++-- demos/link-prediction/complex-link-prediction.ipynb | 4 ++-- demos/link-prediction/ctdne-link-prediction.ipynb | 4 ++-- demos/link-prediction/distmult-link-prediction.ipynb | 4 ++-- demos/link-prediction/gcn-link-prediction.ipynb | 4 ++-- demos/link-prediction/graphsage-link-prediction.ipynb | 4 ++-- demos/link-prediction/hinsage-link-prediction.ipynb | 4 ++-- demos/link-prediction/node2vec-link-prediction.ipynb | 4 ++-- demos/node-classification/attri2vec-node-classification.ipynb | 4 ++-- .../node-classification/cluster-gcn-node-classification.ipynb | 4 ++-- .../directed-graphsage-node-classification.ipynb | 4 ++-- demos/node-classification/gat-node-classification.ipynb | 4 ++-- demos/node-classification/gcn-node-classification.ipynb | 4 ++-- .../graphsage-inductive-node-classification.ipynb | 4 ++-- demos/node-classification/graphsage-node-classification.ipynb | 4 ++-- demos/node-classification/node2vec-node-classification.ipynb | 4 ++-- .../node2vec-weighted-node-classification.ipynb | 4 ++-- demos/node-classification/ppnp-node-classification.ipynb | 4 ++-- demos/node-classification/rgcn-node-classification.ipynb | 4 ++-- demos/node-classification/sgc-node-classification.ipynb | 4 ++-- demos/time-series/gcn-lstm-time-series.ipynb | 4 ++-- 33 files changed, 66 insertions(+), 66 deletions(-) diff --git a/demos/embeddings/attri2vec-embeddings.ipynb b/demos/embeddings/attri2vec-embeddings.ipynb index 2fc94825f..35d1d0af3 100644 --- a/demos/embeddings/attri2vec-embeddings.ipynb +++ b/demos/embeddings/attri2vec-embeddings.ipynb @@ -15,7 +15,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/embeddings/stellargraph-attri2vec-citeseer.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/embeddings/stellargraph-attri2vec-citeseer.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/embeddings/attri2vec-embeddings.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/embeddings/attri2vec-embeddings.ipynb)" ] }, { @@ -488,7 +488,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/embeddings/stellargraph-attri2vec-citeseer.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/embeddings/stellargraph-attri2vec-citeseer.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/embeddings/attri2vec-embeddings.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/embeddings/attri2vec-embeddings.ipynb)" ] } ], diff --git a/demos/embeddings/deep-graph-infomax-embeddings.ipynb b/demos/embeddings/deep-graph-infomax-embeddings.ipynb index b02dfba8f..1d0496dc1 100644 --- a/demos/embeddings/deep-graph-infomax-embeddings.ipynb +++ b/demos/embeddings/deep-graph-infomax-embeddings.ipynb @@ -15,7 +15,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/embeddings/deep-graph-infomax-cora.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/embeddings/deep-graph-infomax-cora.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/embeddings/deep-graph-infomax-embeddings.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/embeddings/deep-graph-infomax-embeddings.ipynb)" ] }, { @@ -595,7 +595,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/embeddings/deep-graph-infomax-cora.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/embeddings/deep-graph-infomax-cora.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/embeddings/deep-graph-infomax-embeddings.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/embeddings/deep-graph-infomax-embeddings.ipynb)" ] } ], diff --git a/demos/embeddings/graphsage-unsupervised-sampler-embeddings.ipynb b/demos/embeddings/graphsage-unsupervised-sampler-embeddings.ipynb index fce875ca7..78c7b1b77 100644 --- a/demos/embeddings/graphsage-unsupervised-sampler-embeddings.ipynb +++ b/demos/embeddings/graphsage-unsupervised-sampler-embeddings.ipynb @@ -15,7 +15,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/embeddings/embeddings-unsupervised-graphsage-cora.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/embeddings/embeddings-unsupervised-graphsage-cora.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/embeddings/graphsage-unsupervised-sampler-embeddings.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/embeddings/graphsage-unsupervised-sampler-embeddings.ipynb)" ] }, { @@ -769,7 +769,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/embeddings/embeddings-unsupervised-graphsage-cora.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/embeddings/embeddings-unsupervised-graphsage-cora.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/embeddings/graphsage-unsupervised-sampler-embeddings.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/embeddings/graphsage-unsupervised-sampler-embeddings.ipynb)" ] } ], diff --git a/demos/embeddings/graphwave-embeddings.ipynb b/demos/embeddings/graphwave-embeddings.ipynb index cbdee152c..8207c7188 100644 --- a/demos/embeddings/graphwave-embeddings.ipynb +++ b/demos/embeddings/graphwave-embeddings.ipynb @@ -15,7 +15,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/embeddings/graphwave-barbell.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/embeddings/graphwave-barbell.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/embeddings/graphwave-embeddings.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/embeddings/graphwave-embeddings.ipynb)" ] }, { @@ -211,7 +211,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/embeddings/graphwave-barbell.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/embeddings/graphwave-barbell.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/embeddings/graphwave-embeddings.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/embeddings/graphwave-embeddings.ipynb)" ] } ], diff --git a/demos/embeddings/metapath2vec-embeddings.ipynb b/demos/embeddings/metapath2vec-embeddings.ipynb index 020c1eea4..b7a51e54e 100644 --- a/demos/embeddings/metapath2vec-embeddings.ipynb +++ b/demos/embeddings/metapath2vec-embeddings.ipynb @@ -15,7 +15,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/embeddings/stellargraph-metapath2vec.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/embeddings/stellargraph-metapath2vec.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/embeddings/metapath2vec-embeddings.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/embeddings/metapath2vec-embeddings.ipynb)" ] }, { @@ -349,7 +349,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/embeddings/stellargraph-metapath2vec.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/embeddings/stellargraph-metapath2vec.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/embeddings/metapath2vec-embeddings.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/embeddings/metapath2vec-embeddings.ipynb)" ] } ], diff --git a/demos/embeddings/node2vec-embeddings.ipynb b/demos/embeddings/node2vec-embeddings.ipynb index 04c5cf09d..d648dccb6 100644 --- a/demos/embeddings/node2vec-embeddings.ipynb +++ b/demos/embeddings/node2vec-embeddings.ipynb @@ -15,7 +15,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/embeddings/stellargraph-node2vec.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/embeddings/stellargraph-node2vec.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/embeddings/node2vec-embeddings.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/embeddings/node2vec-embeddings.ipynb)" ] }, { @@ -344,7 +344,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/embeddings/stellargraph-node2vec.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/embeddings/stellargraph-node2vec.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/embeddings/node2vec-embeddings.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/embeddings/node2vec-embeddings.ipynb)" ] } ], diff --git a/demos/embeddings/watch-your-step-embeddings.ipynb b/demos/embeddings/watch-your-step-embeddings.ipynb index 96a6301d6..a7b453c30 100644 --- a/demos/embeddings/watch-your-step-embeddings.ipynb +++ b/demos/embeddings/watch-your-step-embeddings.ipynb @@ -15,7 +15,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/embeddings/watch-your-step-cora-demo.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/embeddings/watch-your-step-cora-demo.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/embeddings/watch-your-step-embeddings.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/embeddings/watch-your-step-embeddings.ipynb)" ] }, { @@ -594,7 +594,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/embeddings/watch-your-step-cora-demo.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/embeddings/watch-your-step-cora-demo.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/embeddings/watch-your-step-embeddings.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/embeddings/watch-your-step-embeddings.ipynb)" ] } ], diff --git a/demos/graph-classification/gcn-supervised-graph-classification.ipynb b/demos/graph-classification/gcn-supervised-graph-classification.ipynb index 8e67c6788..94c647b1e 100644 --- a/demos/graph-classification/gcn-supervised-graph-classification.ipynb +++ b/demos/graph-classification/gcn-supervised-graph-classification.ipynb @@ -15,7 +15,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/graph-classification/supervised-graph-classification.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/graph-classification/supervised-graph-classification.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/graph-classification/gcn-supervised-graph-classification.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/graph-classification/gcn-supervised-graph-classification.ipynb)" ] }, { @@ -561,7 +561,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/graph-classification/supervised-graph-classification.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/graph-classification/supervised-graph-classification.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/graph-classification/gcn-supervised-graph-classification.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/graph-classification/gcn-supervised-graph-classification.ipynb)" ] } ], diff --git a/demos/interpretability/gat-cora-node-link-importance.ipynb b/demos/interpretability/gat-cora-node-link-importance.ipynb index 6fab50708..60c909fdf 100644 --- a/demos/interpretability/gat-cora-node-link-importance.ipynb +++ b/demos/interpretability/gat-cora-node-link-importance.ipynb @@ -15,7 +15,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/interpretability/gat/node-link-importance-demo-gat.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/interpretability/gat/node-link-importance-demo-gat.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/interpretability/gat-cora-node-link-importance.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/interpretability/gat-cora-node-link-importance.ipynb)" ] }, { @@ -1059,7 +1059,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/interpretability/gat/node-link-importance-demo-gat.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/interpretability/gat/node-link-importance-demo-gat.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/interpretability/gat-cora-node-link-importance.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/interpretability/gat-cora-node-link-importance.ipynb)" ] } ], diff --git a/demos/interpretability/gcn-cora-node-link-importance.ipynb b/demos/interpretability/gcn-cora-node-link-importance.ipynb index 17fdb56ef..97fd4dbda 100644 --- a/demos/interpretability/gcn-cora-node-link-importance.ipynb +++ b/demos/interpretability/gcn-cora-node-link-importance.ipynb @@ -15,7 +15,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/interpretability/gcn/node-link-importance-demo-gcn.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/interpretability/gcn/node-link-importance-demo-gcn.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/interpretability/gcn-cora-node-link-importance.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/interpretability/gcn-cora-node-link-importance.ipynb)" ] }, { @@ -1085,7 +1085,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/interpretability/gcn/node-link-importance-demo-gcn.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/interpretability/gcn/node-link-importance-demo-gcn.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/interpretability/gcn-cora-node-link-importance.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/interpretability/gcn-cora-node-link-importance.ipynb)" ] } ], diff --git a/demos/interpretability/gcn-sparse-cora-node-link-importance.ipynb b/demos/interpretability/gcn-sparse-cora-node-link-importance.ipynb index 9ac1d3207..e68102813 100644 --- a/demos/interpretability/gcn-sparse-cora-node-link-importance.ipynb +++ b/demos/interpretability/gcn-sparse-cora-node-link-importance.ipynb @@ -15,7 +15,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/interpretability/gcn/node-link-importance-demo-gcn-sparse.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/interpretability/gcn/node-link-importance-demo-gcn-sparse.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/interpretability/gcn-sparse-cora-node-link-importance.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/interpretability/gcn-sparse-cora-node-link-importance.ipynb)" ] }, { @@ -1059,7 +1059,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/interpretability/gcn/node-link-importance-demo-gcn-sparse.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/interpretability/gcn/node-link-importance-demo-gcn-sparse.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/interpretability/gcn-sparse-cora-node-link-importance.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/interpretability/gcn-sparse-cora-node-link-importance.ipynb)" ] } ], diff --git a/demos/interpretability/hateful-twitters-interpretability.ipynb b/demos/interpretability/hateful-twitters-interpretability.ipynb index f9ccd564e..3f1c9e92e 100644 --- a/demos/interpretability/hateful-twitters-interpretability.ipynb +++ b/demos/interpretability/hateful-twitters-interpretability.ipynb @@ -15,7 +15,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/interpretability/gcn/hateful-twitters-interpretability.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/interpretability/gcn/hateful-twitters-interpretability.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/interpretability/hateful-twitters-interpretability.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/interpretability/hateful-twitters-interpretability.ipynb)" ] }, { @@ -2161,7 +2161,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/interpretability/gcn/hateful-twitters-interpretability.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/interpretability/gcn/hateful-twitters-interpretability.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/interpretability/hateful-twitters-interpretability.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/interpretability/hateful-twitters-interpretability.ipynb)" ] } ], diff --git a/demos/link-prediction/attri2vec-link-prediction.ipynb b/demos/link-prediction/attri2vec-link-prediction.ipynb index 8ce10bc9e..2944dfb12 100644 --- a/demos/link-prediction/attri2vec-link-prediction.ipynb +++ b/demos/link-prediction/attri2vec-link-prediction.ipynb @@ -15,7 +15,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/link-prediction/attri2vec/stellargraph-attri2vec-DBLP.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/link-prediction/attri2vec/stellargraph-attri2vec-DBLP.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/link-prediction/attri2vec-link-prediction.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/link-prediction/attri2vec-link-prediction.ipynb)" ] }, { @@ -965,7 +965,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/link-prediction/attri2vec/stellargraph-attri2vec-DBLP.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/link-prediction/attri2vec/stellargraph-attri2vec-DBLP.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/link-prediction/attri2vec-link-prediction.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/link-prediction/attri2vec-link-prediction.ipynb)" ] } ], diff --git a/demos/link-prediction/complex-link-prediction.ipynb b/demos/link-prediction/complex-link-prediction.ipynb index f5127dbc0..7bc48ec85 100644 --- a/demos/link-prediction/complex-link-prediction.ipynb +++ b/demos/link-prediction/complex-link-prediction.ipynb @@ -15,7 +15,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/link-prediction/knowledge-graphs/complex.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/link-prediction/knowledge-graphs/complex.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/link-prediction/complex-link-prediction.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/link-prediction/complex-link-prediction.ipynb)" ] }, { @@ -1001,7 +1001,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/link-prediction/knowledge-graphs/complex.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/link-prediction/knowledge-graphs/complex.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/link-prediction/complex-link-prediction.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/link-prediction/complex-link-prediction.ipynb)" ] } ], diff --git a/demos/link-prediction/ctdne-link-prediction.ipynb b/demos/link-prediction/ctdne-link-prediction.ipynb index 491ab0389..8899bccf9 100644 --- a/demos/link-prediction/ctdne-link-prediction.ipynb +++ b/demos/link-prediction/ctdne-link-prediction.ipynb @@ -15,7 +15,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/link-prediction/random-walks/ctdne-link-prediction.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/link-prediction/random-walks/ctdne-link-prediction.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/link-prediction/ctdne-link-prediction.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/link-prediction/ctdne-link-prediction.ipynb)" ] }, { @@ -727,7 +727,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/link-prediction/random-walks/ctdne-link-prediction.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/link-prediction/random-walks/ctdne-link-prediction.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/link-prediction/ctdne-link-prediction.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/link-prediction/ctdne-link-prediction.ipynb)" ] } ], diff --git a/demos/link-prediction/distmult-link-prediction.ipynb b/demos/link-prediction/distmult-link-prediction.ipynb index 1c8461318..7ceea7208 100644 --- a/demos/link-prediction/distmult-link-prediction.ipynb +++ b/demos/link-prediction/distmult-link-prediction.ipynb @@ -15,7 +15,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/link-prediction/knowledge-graphs/distmult.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/link-prediction/knowledge-graphs/distmult.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/link-prediction/distmult-link-prediction.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/link-prediction/distmult-link-prediction.ipynb)" ] }, { @@ -778,7 +778,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/link-prediction/knowledge-graphs/distmult.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/link-prediction/knowledge-graphs/distmult.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/link-prediction/distmult-link-prediction.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/link-prediction/distmult-link-prediction.ipynb)" ] } ], diff --git a/demos/link-prediction/gcn-link-prediction.ipynb b/demos/link-prediction/gcn-link-prediction.ipynb index 47c0acb76..888e32e31 100644 --- a/demos/link-prediction/gcn-link-prediction.ipynb +++ b/demos/link-prediction/gcn-link-prediction.ipynb @@ -15,7 +15,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/link-prediction/gcn/cora-gcn-links-example.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/link-prediction/gcn/cora-gcn-links-example.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/link-prediction/gcn-link-prediction.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/link-prediction/gcn-link-prediction.ipynb)" ] }, { @@ -645,7 +645,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/link-prediction/gcn/cora-gcn-links-example.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/link-prediction/gcn/cora-gcn-links-example.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/link-prediction/gcn-link-prediction.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/link-prediction/gcn-link-prediction.ipynb)" ] } ], diff --git a/demos/link-prediction/graphsage-link-prediction.ipynb b/demos/link-prediction/graphsage-link-prediction.ipynb index 40de335f4..977a8cc22 100644 --- a/demos/link-prediction/graphsage-link-prediction.ipynb +++ b/demos/link-prediction/graphsage-link-prediction.ipynb @@ -15,7 +15,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/link-prediction/graphsage/cora-links-example.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/link-prediction/graphsage/cora-links-example.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/link-prediction/graphsage-link-prediction.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/link-prediction/graphsage-link-prediction.ipynb)" ] }, { @@ -624,7 +624,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/link-prediction/graphsage/cora-links-example.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/link-prediction/graphsage/cora-links-example.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/link-prediction/graphsage-link-prediction.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/link-prediction/graphsage-link-prediction.ipynb)" ] } ], diff --git a/demos/link-prediction/hinsage-link-prediction.ipynb b/demos/link-prediction/hinsage-link-prediction.ipynb index 89f17ca91..edfe63df3 100644 --- a/demos/link-prediction/hinsage-link-prediction.ipynb +++ b/demos/link-prediction/hinsage-link-prediction.ipynb @@ -15,7 +15,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/link-prediction/hinsage/movielens-recommender.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/link-prediction/hinsage/movielens-recommender.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/link-prediction/hinsage-link-prediction.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/link-prediction/hinsage-link-prediction.ipynb)" ] }, { @@ -780,7 +780,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/link-prediction/hinsage/movielens-recommender.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/link-prediction/hinsage/movielens-recommender.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/link-prediction/hinsage-link-prediction.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/link-prediction/hinsage-link-prediction.ipynb)" ] } ], diff --git a/demos/link-prediction/node2vec-link-prediction.ipynb b/demos/link-prediction/node2vec-link-prediction.ipynb index f68f83b10..74dcdbe7e 100644 --- a/demos/link-prediction/node2vec-link-prediction.ipynb +++ b/demos/link-prediction/node2vec-link-prediction.ipynb @@ -15,7 +15,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/link-prediction/random-walks/cora-lp-demo.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/link-prediction/random-walks/cora-lp-demo.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/link-prediction/node2vec-link-prediction.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/link-prediction/node2vec-link-prediction.ipynb)" ] }, { @@ -822,7 +822,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/link-prediction/random-walks/cora-lp-demo.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/link-prediction/random-walks/cora-lp-demo.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/link-prediction/node2vec-link-prediction.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/link-prediction/node2vec-link-prediction.ipynb)" ] } ], diff --git a/demos/node-classification/attri2vec-node-classification.ipynb b/demos/node-classification/attri2vec-node-classification.ipynb index 5058dd500..3f2998453 100644 --- a/demos/node-classification/attri2vec-node-classification.ipynb +++ b/demos/node-classification/attri2vec-node-classification.ipynb @@ -15,7 +15,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/node-classification/attri2vec/attri2vec-citeseer-node-classification-example.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/node-classification/attri2vec/attri2vec-citeseer-node-classification-example.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/node-classification/attri2vec-node-classification.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/node-classification/attri2vec-node-classification.ipynb)" ] }, { @@ -620,7 +620,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/node-classification/attri2vec/attri2vec-citeseer-node-classification-example.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/node-classification/attri2vec/attri2vec-citeseer-node-classification-example.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/node-classification/attri2vec-node-classification.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/node-classification/attri2vec-node-classification.ipynb)" ] } ], diff --git a/demos/node-classification/cluster-gcn-node-classification.ipynb b/demos/node-classification/cluster-gcn-node-classification.ipynb index 8b26456ee..bf4af9726 100644 --- a/demos/node-classification/cluster-gcn-node-classification.ipynb +++ b/demos/node-classification/cluster-gcn-node-classification.ipynb @@ -15,7 +15,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/node-classification/cluster-gcn/cluster-gcn-node-classification.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/node-classification/cluster-gcn/cluster-gcn-node-classification.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/node-classification/cluster-gcn-node-classification.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/node-classification/cluster-gcn-node-classification.ipynb)" ] }, { @@ -1175,7 +1175,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/node-classification/cluster-gcn/cluster-gcn-node-classification.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/node-classification/cluster-gcn/cluster-gcn-node-classification.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/node-classification/cluster-gcn-node-classification.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/node-classification/cluster-gcn-node-classification.ipynb)" ] } ], diff --git a/demos/node-classification/directed-graphsage-node-classification.ipynb b/demos/node-classification/directed-graphsage-node-classification.ipynb index e27a7c783..1707dbf0f 100644 --- a/demos/node-classification/directed-graphsage-node-classification.ipynb +++ b/demos/node-classification/directed-graphsage-node-classification.ipynb @@ -15,7 +15,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/node-classification/graphsage/directed-graphsage-on-cora-example.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/node-classification/graphsage/directed-graphsage-on-cora-example.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/node-classification/directed-graphsage-node-classification.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/node-classification/directed-graphsage-node-classification.ipynb)" ] }, { @@ -910,7 +910,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/node-classification/graphsage/directed-graphsage-on-cora-example.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/node-classification/graphsage/directed-graphsage-on-cora-example.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/node-classification/directed-graphsage-node-classification.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/node-classification/directed-graphsage-node-classification.ipynb)" ] } ], diff --git a/demos/node-classification/gat-node-classification.ipynb b/demos/node-classification/gat-node-classification.ipynb index 61fcb3a3f..fc1b9419c 100644 --- a/demos/node-classification/gat-node-classification.ipynb +++ b/demos/node-classification/gat-node-classification.ipynb @@ -15,7 +15,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/node-classification/gat/gat-cora-node-classification-example.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/node-classification/gat/gat-cora-node-classification-example.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/node-classification/gat-node-classification.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/node-classification/gat-node-classification.ipynb)" ] }, { @@ -1042,7 +1042,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/node-classification/gat/gat-cora-node-classification-example.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/node-classification/gat/gat-cora-node-classification-example.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/node-classification/gat-node-classification.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/node-classification/gat-node-classification.ipynb)" ] } ], diff --git a/demos/node-classification/gcn-node-classification.ipynb b/demos/node-classification/gcn-node-classification.ipynb index aab10a621..d2611a027 100644 --- a/demos/node-classification/gcn-node-classification.ipynb +++ b/demos/node-classification/gcn-node-classification.ipynb @@ -17,7 +17,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/node-classification/gcn/gcn-cora-node-classification-example.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/node-classification/gcn/gcn-cora-node-classification-example.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/node-classification/gcn-node-classification.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/node-classification/gcn-node-classification.ipynb)" ] }, { @@ -1328,7 +1328,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/node-classification/gcn/gcn-cora-node-classification-example.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/node-classification/gcn/gcn-cora-node-classification-example.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/node-classification/gcn-node-classification.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/node-classification/gcn-node-classification.ipynb)" ] } ], diff --git a/demos/node-classification/graphsage-inductive-node-classification.ipynb b/demos/node-classification/graphsage-inductive-node-classification.ipynb index 952b6d019..5de401ae0 100644 --- a/demos/node-classification/graphsage-inductive-node-classification.ipynb +++ b/demos/node-classification/graphsage-inductive-node-classification.ipynb @@ -15,7 +15,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/node-classification/graphsage/graphsage-pubmed-inductive-node-classification-example.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/node-classification/graphsage/graphsage-pubmed-inductive-node-classification-example.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/node-classification/graphsage-inductive-node-classification.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/node-classification/graphsage-inductive-node-classification.ipynb)" ] }, { @@ -1053,7 +1053,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/node-classification/graphsage/graphsage-pubmed-inductive-node-classification-example.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/node-classification/graphsage/graphsage-pubmed-inductive-node-classification-example.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/node-classification/graphsage-inductive-node-classification.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/node-classification/graphsage-inductive-node-classification.ipynb)" ] } ], diff --git a/demos/node-classification/graphsage-node-classification.ipynb b/demos/node-classification/graphsage-node-classification.ipynb index b6a007b45..c9e53678a 100644 --- a/demos/node-classification/graphsage-node-classification.ipynb +++ b/demos/node-classification/graphsage-node-classification.ipynb @@ -15,7 +15,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/node-classification/graphsage/graphsage-cora-node-classification-example.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/node-classification/graphsage/graphsage-cora-node-classification-example.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/node-classification/graphsage-node-classification.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/node-classification/graphsage-node-classification.ipynb)" ] }, { @@ -889,7 +889,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/node-classification/graphsage/graphsage-cora-node-classification-example.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/node-classification/graphsage/graphsage-cora-node-classification-example.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/node-classification/graphsage-node-classification.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/node-classification/graphsage-node-classification.ipynb)" ] } ], diff --git a/demos/node-classification/node2vec-node-classification.ipynb b/demos/node-classification/node2vec-node-classification.ipynb index 1bee8f2ad..c255c756b 100644 --- a/demos/node-classification/node2vec-node-classification.ipynb +++ b/demos/node-classification/node2vec-node-classification.ipynb @@ -15,7 +15,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/node-classification/node2vec/stellargraph-node2vec-node-classification.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/node-classification/node2vec/stellargraph-node2vec-node-classification.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/node-classification/node2vec-node-classification.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/node-classification/node2vec-node-classification.ipynb)" ] }, { @@ -490,7 +490,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/node-classification/node2vec/stellargraph-node2vec-node-classification.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/node-classification/node2vec/stellargraph-node2vec-node-classification.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/node-classification/node2vec-node-classification.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/node-classification/node2vec-node-classification.ipynb)" ] } ], diff --git a/demos/node-classification/node2vec-weighted-node-classification.ipynb b/demos/node-classification/node2vec-weighted-node-classification.ipynb index e65f9dc63..081fb2303 100644 --- a/demos/node-classification/node2vec-weighted-node-classification.ipynb +++ b/demos/node-classification/node2vec-weighted-node-classification.ipynb @@ -15,7 +15,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/node-classification/node2vec/stellargraph-node2vec-weighted-random-walks.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/node-classification/node2vec/stellargraph-node2vec-weighted-random-walks.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/node-classification/node2vec-weighted-node-classification.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/node-classification/node2vec-weighted-node-classification.ipynb)" ] }, { @@ -1175,7 +1175,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/node-classification/node2vec/stellargraph-node2vec-weighted-random-walks.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/node-classification/node2vec/stellargraph-node2vec-weighted-random-walks.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/node-classification/node2vec-weighted-node-classification.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/node-classification/node2vec-weighted-node-classification.ipynb)" ] } ], diff --git a/demos/node-classification/ppnp-node-classification.ipynb b/demos/node-classification/ppnp-node-classification.ipynb index 88bac203b..7f5147250 100644 --- a/demos/node-classification/ppnp-node-classification.ipynb +++ b/demos/node-classification/ppnp-node-classification.ipynb @@ -15,7 +15,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/node-classification/ppnp/ppnp-cora-node-classification-example.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/node-classification/ppnp/ppnp-cora-node-classification-example.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/node-classification/ppnp-node-classification.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/node-classification/ppnp-node-classification.ipynb)" ] }, { @@ -2029,7 +2029,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/node-classification/ppnp/ppnp-cora-node-classification-example.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/node-classification/ppnp/ppnp-cora-node-classification-example.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/node-classification/ppnp-node-classification.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/node-classification/ppnp-node-classification.ipynb)" ] } ], diff --git a/demos/node-classification/rgcn-node-classification.ipynb b/demos/node-classification/rgcn-node-classification.ipynb index 619df97f3..d8bb9cb20 100644 --- a/demos/node-classification/rgcn-node-classification.ipynb +++ b/demos/node-classification/rgcn-node-classification.ipynb @@ -15,7 +15,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/node-classification/rgcn/rgcn-aifb-node-classification-example.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/node-classification/rgcn/rgcn-aifb-node-classification-example.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/node-classification/rgcn-node-classification.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/node-classification/rgcn-node-classification.ipynb)" ] }, { @@ -473,7 +473,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/node-classification/rgcn/rgcn-aifb-node-classification-example.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/node-classification/rgcn/rgcn-aifb-node-classification-example.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/node-classification/rgcn-node-classification.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/node-classification/rgcn-node-classification.ipynb)" ] } ], diff --git a/demos/node-classification/sgc-node-classification.ipynb b/demos/node-classification/sgc-node-classification.ipynb index eda6df18b..a73c016ff 100644 --- a/demos/node-classification/sgc-node-classification.ipynb +++ b/demos/node-classification/sgc-node-classification.ipynb @@ -15,7 +15,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/node-classification/sgc/sgc-node-classification-example.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/node-classification/sgc/sgc-node-classification-example.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/node-classification/sgc-node-classification.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/node-classification/sgc-node-classification.ipynb)" ] }, { @@ -907,7 +907,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/node-classification/sgc/sgc-node-classification-example.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/node-classification/sgc/sgc-node-classification-example.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/node-classification/sgc-node-classification.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/node-classification/sgc-node-classification.ipynb)" ] } ], diff --git a/demos/time-series/gcn-lstm-time-series.ipynb b/demos/time-series/gcn-lstm-time-series.ipynb index 457425fe3..7d5dee4bc 100644 --- a/demos/time-series/gcn-lstm-time-series.ipynb +++ b/demos/time-series/gcn-lstm-time-series.ipynb @@ -15,7 +15,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/time-series/gcn-lstm-LA.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/time-series/gcn-lstm-LA.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/time-series/gcn-lstm-time-series.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/time-series/gcn-lstm-time-series.ipynb)" ] }, { @@ -968,7 +968,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/time-series/gcn-lstm-LA.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/time-series/gcn-lstm-LA.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/time-series/gcn-lstm-time-series.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/time-series/gcn-lstm-time-series.ipynb)" ] } ], From 1f47777c6dd66f4d0a693d71cb404f6af38930d6 Mon Sep 17 00:00:00 2001 From: Huon Wilson Date: Mon, 4 May 2020 19:26:46 +1000 Subject: [PATCH 21/43] Update the docs directories too --- .buildkite/steps/test-demo-notebooks.sh | 4 +- demos/basics/loading-networkx.ipynb | 2 +- demos/basics/loading-pandas.ipynb | 4 +- demos/basics/loading-saving-neo4j.ipynb | 4 +- ...pynb => calibration-link-prediction.ipynb} | 4 +- ... => calibration-node-classification.ipynb} | 6 +- .../deep-graph-infomax-embeddings.ipynb | 2 +- ...e.ipynb => gat-node-link-importance.ipynb} | 0 ...e.ipynb => gcn-node-link-importance.ipynb} | 0 ... => gcn-sparse-node-link-importance.ipynb} | 0 .../gcn-node-classification.ipynb | 10 +- .../calibration-link-prediction.nblink | 3 + .../calibration-node-classification.nblink | 3 + .../calibration-pubmed-link-prediction.nblink | 3 - ...ibration-pubmed-node-classification.nblink | 3 - docs/demos/calibration/index.txt | 2 +- docs/demos/embeddings/index.txt | 14 +- docs/demos/ensembles/index.txt | 4 +- docs/demos/graph-classification/index.txt | 2 +- docs/demos/index.txt | 2 +- .../gat-cora-node-link-importance.nblink | 3 - .../gat-node-link-importance.nblink | 3 + docs/demos/interpretability/gat/index.txt | 12 -- .../gcn-cora-node-link-importance.nblink | 3 - .../gcn-node-link-importance.nblink | 3 + ...cn-sparse-cora-node-link-importance.nblink | 3 - .../gcn-sparse-node-link-importance.nblink | 3 + docs/demos/interpretability/gcn/index.txt | 12 -- docs/demos/interpretability/index.txt | 6 +- .../demos/link-prediction/attri2vec/index.txt | 75 --------- docs/demos/link-prediction/gcn/index.txt | 12 -- .../demos/link-prediction/graphsage/index.txt | 56 ------- docs/demos/link-prediction/hinsage/index.txt | 64 -------- docs/demos/link-prediction/index.txt | 16 +- .../knowledge-graphs/index.txt | 12 -- .../link-prediction/random-walks/index.txt | 151 ------------------ .../node-classification/attri2vec/index.txt | 45 ------ .../node-classification/cluster-gcn/index.txt | 12 -- docs/demos/node-classification/gat/index.txt | 40 ----- docs/demos/node-classification/gcn/index.txt | 30 ---- .../node-classification/graphsage/index.txt | 52 ------ .../node-classification/hinsage/index.txt | 82 ---------- docs/demos/node-classification/index.txt | 32 ++-- .../node-classification/node2vec/index.txt | 35 ---- docs/demos/node-classification/ppnp/index.txt | 29 ---- docs/demos/node-classification/rgcn/index.txt | 12 -- docs/demos/node-classification/sgc/index.txt | 12 -- docs/demos/time-series/index.txt | 2 +- 48 files changed, 69 insertions(+), 820 deletions(-) rename demos/calibration/{calibration-pubmed-link-prediction.ipynb => calibration-link-prediction.ipynb} (99%) rename demos/calibration/{calibration-pubmed-node-classification.ipynb => calibration-node-classification.ipynb} (99%) rename demos/interpretability/{gat-cora-node-link-importance.ipynb => gat-node-link-importance.ipynb} (100%) rename demos/interpretability/{gcn-cora-node-link-importance.ipynb => gcn-node-link-importance.ipynb} (100%) rename demos/interpretability/{gcn-sparse-cora-node-link-importance.ipynb => gcn-sparse-node-link-importance.ipynb} (100%) create mode 100644 docs/demos/calibration/calibration-link-prediction.nblink create mode 100644 docs/demos/calibration/calibration-node-classification.nblink delete mode 100644 docs/demos/calibration/calibration-pubmed-link-prediction.nblink delete mode 100644 docs/demos/calibration/calibration-pubmed-node-classification.nblink delete mode 100644 docs/demos/interpretability/gat-cora-node-link-importance.nblink create mode 100644 docs/demos/interpretability/gat-node-link-importance.nblink delete mode 100644 docs/demos/interpretability/gat/index.txt delete mode 100644 docs/demos/interpretability/gcn-cora-node-link-importance.nblink create mode 100644 docs/demos/interpretability/gcn-node-link-importance.nblink delete mode 100644 docs/demos/interpretability/gcn-sparse-cora-node-link-importance.nblink create mode 100644 docs/demos/interpretability/gcn-sparse-node-link-importance.nblink delete mode 100644 docs/demos/interpretability/gcn/index.txt delete mode 100644 docs/demos/link-prediction/attri2vec/index.txt delete mode 100644 docs/demos/link-prediction/gcn/index.txt delete mode 100644 docs/demos/link-prediction/graphsage/index.txt delete mode 100644 docs/demos/link-prediction/hinsage/index.txt delete mode 100644 docs/demos/link-prediction/knowledge-graphs/index.txt delete mode 100644 docs/demos/link-prediction/random-walks/index.txt delete mode 100644 docs/demos/node-classification/attri2vec/index.txt delete mode 100644 docs/demos/node-classification/cluster-gcn/index.txt delete mode 100644 docs/demos/node-classification/gat/index.txt delete mode 100644 docs/demos/node-classification/gcn/index.txt delete mode 100644 docs/demos/node-classification/graphsage/index.txt delete mode 100644 docs/demos/node-classification/hinsage/index.txt delete mode 100644 docs/demos/node-classification/node2vec/index.txt delete mode 100644 docs/demos/node-classification/ppnp/index.txt delete mode 100644 docs/demos/node-classification/rgcn/index.txt delete mode 100644 docs/demos/node-classification/sgc/index.txt diff --git a/.buildkite/steps/test-demo-notebooks.sh b/.buildkite/steps/test-demo-notebooks.sh index e3f22fcac..f813714a8 100755 --- a/.buildkite/steps/test-demo-notebooks.sh +++ b/.buildkite/steps/test-demo-notebooks.sh @@ -32,8 +32,8 @@ fi f=${NOTEBOOKS[$INDEX]} case $(basename "$f") in - 'attacks_clustering_analysis.ipynb' | 'hateful-twitters-interpretability.ipynb' | 'hateful-twitters.ipynb' | 'stellargraph-attri2vec-DBLP.ipynb' | \ - 'node-link-importance-demo-gat.ipynb' | 'node-link-importance-demo-gcn.ipynb' | 'node-link-importance-demo-gcn-sparse.ipynb' | 'rgcn-aifb-node-classification-example.ipynb' | \ + 'attacks_clustering_analysis.ipynb' | 'hateful-twitters-interpretability.ipynb' | 'hateful-twitters.ipynb' | 'attri2vec-link-prediction.ipynb' | \ + 'gat-node-link-importance.ipynb' | 'gcn-node-link-importance.ipynb' | 'gcn-sparse-node-link-importance.ipynb' | 'rgcn-node-classification.ipynb' | \ 'stellargraph-metapath2vec.ipynb') # These notebooks do not yet work on CI: # FIXME #818: datasets can't be downloaded diff --git a/demos/basics/loading-networkx.ipynb b/demos/basics/loading-networkx.ipynb index cb78fcb53..cc6783644 100644 --- a/demos/basics/loading-networkx.ipynb +++ b/demos/basics/loading-networkx.ipynb @@ -1037,7 +1037,7 @@ "\n", "Revisit this document to use as a reminder, or [documentation](https://stellargraph.readthedocs.io/en/latest/api.html#stellargraph.StellarGraph.from_networkx) for the `StellarGraph.from_networkx` static method.\n", "\n", - "Once you've loaded your data, you can start doing machine learning: a good place to start is the [demo of the GCN algorithm on the Cora dataset for node classification](../node-classification/gcn/gcn-cora-node-classification-example.ipynb). Additionally, StellarGraph includes [many other demos of other algorithms, solving other tasks](../README.md)." + "Once you've loaded your data, you can start doing machine learning: a good place to start is the [demo of the GCN algorithm on the Cora dataset for node classification](../node-classification/gcn-node-classification.ipynb). Additionally, StellarGraph includes [many other demos of other algorithms, solving other tasks](../README.md)." ] }, { diff --git a/demos/basics/loading-pandas.ipynb b/demos/basics/loading-pandas.ipynb index 852cfde84..9302c18ec 100644 --- a/demos/basics/loading-pandas.ipynb +++ b/demos/basics/loading-pandas.ipynb @@ -3306,7 +3306,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "This dataset, with this preparation, is used in [a demo of the GCN algorithm for node classification](../node-classification/gcn/gcn-cora-node-classification-example.ipynb). The task is to predict the subject of each node." + "This dataset, with this preparation, is used in [a demo of the GCN algorithm for node classification](../node-classification/gcn-node-classification.ipynb). The task is to predict the subject of each node." ] }, { @@ -3780,7 +3780,7 @@ "\n", "Revisit this document to use as a reminder, or [the documentation](https://stellargraph.readthedocs.io/en/stable/api.html#stellargraph.StellarGraph) for the `StellarGraph` class.\n", "\n", - "Once you've loaded your data, you can start doing machine learning: a good place to start is the [demo of the GCN algorithm on the Cora dataset for node classification](../node-classification/gcn/gcn-cora-node-classification-example.ipynb). Additionally, StellarGraph includes [many other demos of other algorithms, solving other tasks](../README.md)." + "Once you've loaded your data, you can start doing machine learning: a good place to start is the [demo of the GCN algorithm on the Cora dataset for node classification](../node-classification/gcn-node-classification.ipynb). Additionally, StellarGraph includes [many other demos of other algorithms, solving other tasks](../README.md)." ] }, { diff --git a/demos/basics/loading-saving-neo4j.ipynb b/demos/basics/loading-saving-neo4j.ipynb index d5d85bd06..227c7c8b3 100644 --- a/demos/basics/loading-saving-neo4j.ipynb +++ b/demos/basics/loading-saving-neo4j.ipynb @@ -1812,7 +1812,7 @@ "source": [ "## Saving predictions into Neo4j\n", "\n", - "Most graph machine learning tasks will end up with some sort of predictions about some set of nodes or links in the graph. For example, [a node classification task]((../node-classification/gcn/gcn-cora-node-classification-example.ipynb) might result in either predicted scores for a node into different classes, or even just the single class that is the most likely. The formats of these are usually:\n", + "Most graph machine learning tasks will end up with some sort of predictions about some set of nodes or links in the graph. For example, [a node classification task]((../node-classification/gcn-node-classification.ipynb) might result in either predicted scores for a node into different classes, or even just the single class that is the most likely. The formats of these are usually:\n", "\n", "- scores: a multidimensional [NumPy](https://numpy.org) array. In the node classification example linked above, it's an array of floats of shape `(1, 2708, 7)`, where each of element along the axis of size 2708 represents a node, and the 7 numbers for that element represents the scores for each of the 7 classes for that node.\n", "- classes: a one-dimensional NumPy array. In the node classification example linked above, it's an array of strings of length 2708, where each element represents the predicted class for a node.\n", @@ -1998,7 +1998,7 @@ "\n", "Revisit this document to use as a reminder.\n", "\n", - "Once you've loaded your data, you can start doing machine learning: a good place to start is the [demo of the GCN algorithm on the Cora dataset for node classification](../node-classification/gcn/gcn-cora-node-classification-example.ipynb). Additionally, StellarGraph includes [many other demos of other algorithms, solving other tasks](../README.md). We also have experimental support for [running some algorithms directly using Neo4j](../connector/neo4j/README.md).\n", + "Once you've loaded your data, you can start doing machine learning: a good place to start is the [demo of the GCN algorithm on the Cora dataset for node classification](../node-classification/gcn-node-classification.ipynb). Additionally, StellarGraph includes [many other demos of other algorithms, solving other tasks](../README.md). We also have experimental support for [running some algorithms directly using Neo4j](../connector/neo4j/README.md).\n", "\n", "(We're still exploring the best ways to have StellarGraph work with Neo4j, so please [let us know](https://github.com/stellargraph/stellargraph#getting-help) your experience of using StellarGraph with Neo4j, both positive and negative.)" ] diff --git a/demos/calibration/calibration-pubmed-link-prediction.ipynb b/demos/calibration/calibration-link-prediction.ipynb similarity index 99% rename from demos/calibration/calibration-pubmed-link-prediction.ipynb rename to demos/calibration/calibration-link-prediction.ipynb index b07536430..ef9e12bb5 100644 --- a/demos/calibration/calibration-pubmed-link-prediction.ipynb +++ b/demos/calibration/calibration-link-prediction.ipynb @@ -15,7 +15,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/calibration/calibration-pubmed-link-prediction.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/calibration/calibration-pubmed-link-prediction.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/calibration/calibration-link-prediction.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/calibration/calibration-link-prediction.ipynb)" ] }, { @@ -1200,7 +1200,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/calibration/calibration-pubmed-link-prediction.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/calibration/calibration-pubmed-link-prediction.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/calibration/calibration-link-prediction.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/calibration/calibration-link-prediction.ipynb)" ] } ], diff --git a/demos/calibration/calibration-pubmed-node-classification.ipynb b/demos/calibration/calibration-node-classification.ipynb similarity index 99% rename from demos/calibration/calibration-pubmed-node-classification.ipynb rename to demos/calibration/calibration-node-classification.ipynb index 188e10ad6..799807e01 100644 --- a/demos/calibration/calibration-pubmed-node-classification.ipynb +++ b/demos/calibration/calibration-node-classification.ipynb @@ -15,7 +15,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/calibration/calibration-pubmed-node-classification.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/calibration/calibration-pubmed-node-classification.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/calibration/calibration-node-classification.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/calibration/calibration-node-classification.ipynb)" ] }, { @@ -28,7 +28,7 @@ "\n", "Since the focus of this notebook is to demonstrate the calibration of StellarGraph's graph neural network models for classification, we do not go into detail on the training and evaluation of said models. We suggest the reader consider the following notebook for more details on how to train and evaluate a GraphSAGE model for node attribute inference,\n", "\n", - "[Stellargraph example: GraphSAGE on the CORA citation network](../node-classification/graphsage/graphsage-cora-node-classification-example.ipynb)\n", + "[Stellargraph example: GraphSAGE on the CORA citation network](../node-classification/graphsage-node-classification.ipynb)\n", "\n", "**References**\n", "1. Inductive Representation Learning on Large Graphs. W.L. Hamilton, R. Ying, and J. Leskovec arXiv:1706.02216 \n", @@ -1520,7 +1520,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/calibration/calibration-pubmed-node-classification.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/calibration/calibration-pubmed-node-classification.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/calibration/calibration-node-classification.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/calibration/calibration-node-classification.ipynb)" ] } ], diff --git a/demos/embeddings/deep-graph-infomax-embeddings.ipynb b/demos/embeddings/deep-graph-infomax-embeddings.ipynb index 1d0496dc1..7c084efcd 100644 --- a/demos/embeddings/deep-graph-infomax-embeddings.ipynb +++ b/demos/embeddings/deep-graph-infomax-embeddings.ipynb @@ -282,7 +282,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "This accuracy is close to that for [training a supervised GCN model end-to-end](../node-classification/gcn/gcn-cora-node-classification-example.ipynb), suggesting that Deep Graph Infomax is an effective method for unsupervised training." + "This accuracy is close to that for [training a supervised GCN model end-to-end](../node-classification/gcn-node-classification.ipynb), suggesting that Deep Graph Infomax is an effective method for unsupervised training." ] }, { diff --git a/demos/interpretability/gat-cora-node-link-importance.ipynb b/demos/interpretability/gat-node-link-importance.ipynb similarity index 100% rename from demos/interpretability/gat-cora-node-link-importance.ipynb rename to demos/interpretability/gat-node-link-importance.ipynb diff --git a/demos/interpretability/gcn-cora-node-link-importance.ipynb b/demos/interpretability/gcn-node-link-importance.ipynb similarity index 100% rename from demos/interpretability/gcn-cora-node-link-importance.ipynb rename to demos/interpretability/gcn-node-link-importance.ipynb diff --git a/demos/interpretability/gcn-sparse-cora-node-link-importance.ipynb b/demos/interpretability/gcn-sparse-node-link-importance.ipynb similarity index 100% rename from demos/interpretability/gcn-sparse-cora-node-link-importance.ipynb rename to demos/interpretability/gcn-sparse-node-link-importance.ipynb diff --git a/demos/node-classification/gcn-node-classification.ipynb b/demos/node-classification/gcn-node-classification.ipynb index d2611a027..57b4c36aa 100644 --- a/demos/node-classification/gcn-node-classification.ipynb +++ b/demos/node-classification/gcn-node-classification.ipynb @@ -6,7 +6,7 @@ "source": [ "# Graph Convolutional Network (GCN) on the CORA citation dataset\n", "\n", - "> This demo explains how to do node classification using the StellarGraph library. [See all other demos](../../README.md).\n" + "> This demo explains how to do node classification using the StellarGraph library. [See all other demos](../README.md).\n" ] }, { @@ -39,7 +39,7 @@ "\n", "Notably, only section 2 needs StellarGraph: section 1 and section 3 are driven by the existing flexible functionality in common and popular data science libraries. Most of the algorithms supported by StellarGraph follow this pattern, where the custom StellarGraph functionality integrates smoothly with the conventional data science work-flow.\n", "\n", - "> StellarGraph supports other algorithms for doing [node classification](../README.md), as well as many [other tasks](../../README.md) such as [link prediction](../../link-prediction/README.md), [community detection](../../community_detection/README.md), and [representation learning](../../embeddings/README.md).\n", + "> StellarGraph supports other algorithms for doing [node classification](README.md), as well as many [other tasks](../README.md) such as [link prediction](../link-prediction/README.md), [community detection](../community_detection/README.md), and [representation learning](../embeddings/README.md).\n", "\n", "[1]: [Graph Convolutional Networks (GCN): Semi-Supervised Classification with Graph Convolutional Networks](https://github.com/tkipf/gcn). Thomas N. Kipf, Max Welling.\n", "International Conference on Learning Representations (ICLR), 2017" @@ -124,7 +124,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "We can retrieve a `StellarGraph` graph object holding this Cora dataset using the `Cora` loader ([docs](https://stellargraph.readthedocs.io/en/stable/api.html#stellargraph.datasets.datasets.Cora)) from the `datasets` submodule ([docs](https://stellargraph.readthedocs.io/en/stable/api.html#module-stellargraph.datasets.datasets)). It also provides us with the ground-truth node subject classes. This function is implemented using Pandas, see [the \"Loading data into StellarGraph from Pandas\" notebook](../../basics/loading-pandas.ipynb) for details.\n", + "We can retrieve a `StellarGraph` graph object holding this Cora dataset using the `Cora` loader ([docs](https://stellargraph.readthedocs.io/en/stable/api.html#stellargraph.datasets.datasets.Cora)) from the `datasets` submodule ([docs](https://stellargraph.readthedocs.io/en/stable/api.html#module-stellargraph.datasets.datasets)). It also provides us with the ground-truth node subject classes. This function is implemented using Pandas, see [the \"Loading data into StellarGraph from Pandas\" notebook](../basics/loading-pandas.ipynb) for details.\n", "\n", "(Note: Cora is a citation network, which is a directed graph, but, like most users of this graph, we ignore the edge direction and treat it as undirected.)" ] @@ -448,7 +448,7 @@ "- the layers themselves, such as graph convolution, [dropout](https://www.tensorflow.org/api_docs/python/tf/keras/layers/Dropout) and even [conventional dense layers](https://www.tensorflow.org/api_docs/python/tf/keras/layers/Dense)\n", "- a data generator to convert the core graph structure and node features into a format that can be fed into the Keras model for training or prediction\n", "\n", - "GCN is a full-batch model and we're doing node classification here, which means the `FullBatchNodeGenerator` class ([docs](https://stellargraph.readthedocs.io/en/latest/api.html#stellargraph.mapper.FullBatchNodeGenerator)) is the appropriate generator for our task. StellarGraph has many generators in order to support all [its many models and tasks](../../README.md).\n", + "GCN is a full-batch model and we're doing node classification here, which means the `FullBatchNodeGenerator` class ([docs](https://stellargraph.readthedocs.io/en/latest/api.html#stellargraph.mapper.FullBatchNodeGenerator)) is the appropriate generator for our task. StellarGraph has many generators in order to support all [its many models and tasks](../README.md).\n", "\n", "Specifying the `method='gcn'` argument to the `FullBatchNodeGenerator` means it will yield data appropriate for the GCN algorithm specifically, by using the [normalized graph Laplacian matrix](https://en.wikipedia.org/wiki/Laplacian_matrix#Symmetric_normalized_Laplacian) to capture the graph structure." ] @@ -1317,7 +1317,7 @@ "2. built a TensorFlow Keras model and data generator with [the StellarGraph library](https://github.com/stellargraph/stellargraph) \n", "3. trained and evaluated it using TensorFlow and other libraries\n", "\n", - "StellarGraph includes [other algorithms for node classification](../README.md) and [algorithms and demos for other tasks](../../README.md). Most can be applied with the same basic structure as this GCN demo." + "StellarGraph includes [other algorithms for node classification](README.md) and [algorithms and demos for other tasks](../README.md). Most can be applied with the same basic structure as this GCN demo." ] }, { diff --git a/docs/demos/calibration/calibration-link-prediction.nblink b/docs/demos/calibration/calibration-link-prediction.nblink new file mode 100644 index 000000000..1a7a00ce0 --- /dev/null +++ b/docs/demos/calibration/calibration-link-prediction.nblink @@ -0,0 +1,3 @@ +{ + "path": "../../../demos/calibration/calibration-link-prediction.ipynb" +} diff --git a/docs/demos/calibration/calibration-node-classification.nblink b/docs/demos/calibration/calibration-node-classification.nblink new file mode 100644 index 000000000..1f3b57527 --- /dev/null +++ b/docs/demos/calibration/calibration-node-classification.nblink @@ -0,0 +1,3 @@ +{ + "path": "../../../demos/calibration/calibration-node-classification.ipynb" +} diff --git a/docs/demos/calibration/calibration-pubmed-link-prediction.nblink b/docs/demos/calibration/calibration-pubmed-link-prediction.nblink deleted file mode 100644 index 31e47e029..000000000 --- a/docs/demos/calibration/calibration-pubmed-link-prediction.nblink +++ /dev/null @@ -1,3 +0,0 @@ -{ - "path": "../../../demos/calibration/calibration-pubmed-link-prediction.ipynb" -} diff --git a/docs/demos/calibration/calibration-pubmed-node-classification.nblink b/docs/demos/calibration/calibration-pubmed-node-classification.nblink deleted file mode 100644 index 123fd30cd..000000000 --- a/docs/demos/calibration/calibration-pubmed-node-classification.nblink +++ /dev/null @@ -1,3 +0,0 @@ -{ - "path": "../../../demos/calibration/calibration-pubmed-node-classification.ipynb" -} diff --git a/docs/demos/calibration/index.txt b/docs/demos/calibration/index.txt index b94d768ff..846fa671e 100644 --- a/docs/demos/calibration/index.txt +++ b/docs/demos/calibration/index.txt @@ -1,7 +1,7 @@ Model calibration ===================================================== -This folder contains two `Jupyter `_ python notebooks demonstrating ``StellarGraph`` model calibration for binary (``calibration-pubmed-link-prediction.ipynb``) and multi-class classification (``calibration-pubmed-node-classification.ipynb``) problems. +This folder contains two `Jupyter `_ python notebooks demonstrating ``StellarGraph`` model calibration for binary (``calibration-link-prediction.ipynb``) and multi-class classification (``calibration-node-classification.ipynb``) problems. References ---------- diff --git a/docs/demos/embeddings/index.txt b/docs/demos/embeddings/index.txt index eae9379e8..516e29b25 100644 --- a/docs/demos/embeddings/index.txt +++ b/docs/demos/embeddings/index.txt @@ -20,37 +20,37 @@ This table lists all representation learning demos, including the algorithms tra - training method - node features - downstream tasks shown - * - :doc:`Deep Graph Infomax ` + * - :doc:`Deep Graph Infomax ` - GCN, GAT, PPNP, APPNP, GraphSAGE, HinSAGE - ``DeepGraphInfomax`` (mutual information) - yes - visualisation, node classification - * - :doc:`Unsupervised GraphSAGE ` + * - :doc:`Unsupervised GraphSAGE ` - GraphSAGE - ``UnsupervisedSampler`` (link prediction) - yes - visualisation, node classification - * - :doc:`Attri2Vec ` + * - :doc:`Attri2Vec ` - Attri2Vec - ``UnsupervisedSampler`` (link prediction) - yes - visualisation - * - :doc:`Metapath2Vec ` + * - :doc:`Metapath2Vec ` - Metapath2Vec - natively unsupervised - - visualisation - * - :doc:`Node2Vec ` + * - :doc:`Node2Vec ` - Node2Vec - natively unsupervised - - visualisation - * - :doc:`Watch Your Step ` + * - :doc:`Watch Your Step ` - Watch Your Step - natively unsupervised - - visualisation, node classification - * - :doc:`GraphWave ` + * - :doc:`GraphWave ` - GraphWave - natively unsupervised - diff --git a/docs/demos/ensembles/index.txt b/docs/demos/ensembles/index.txt index cc7a94a7e..8d82b0355 100644 --- a/docs/demos/ensembles/index.txt +++ b/docs/demos/ensembles/index.txt @@ -2,8 +2,8 @@ Ensemble learning for graph neural network algorithms ===================================================== This folder contains two `Jupyter `_ python notebooks demonstrating the use of ensemble learning -for node attribute inference (``ensemble-node-classification-example.ipynb``) and -link prediction (``ensemble-link-prediction-example.ipynb``) using ``StellarGraph``'s graph neural network algorithms. +for node attribute inference (``ensemble-node-classification.ipynb``) and +link prediction (``ensemble-link-prediction.ipynb``) using ``StellarGraph``'s graph neural network algorithms. Table of contents ----------------- diff --git a/docs/demos/graph-classification/index.txt b/docs/demos/graph-classification/index.txt index fc235537f..d93ce7ef4 100644 --- a/docs/demos/graph-classification/index.txt +++ b/docs/demos/graph-classification/index.txt @@ -17,7 +17,7 @@ This table lists all graph classification demos, including the algorithms traine - algorithm(s) - node features - inductive - * - :doc:`GCN Supervised Graph Classification ` + * - :doc:`GCN Supervised Graph Classification ` - GCN, mean pooling - yes - yes diff --git a/docs/demos/index.txt b/docs/demos/index.txt index d7ce73c50..1ad491f03 100644 --- a/docs/demos/index.txt +++ b/docs/demos/index.txt @@ -14,7 +14,7 @@ Find algorithms for a task -------------------------- -* Introduction to StellarGraph and its graph machine learning workflow (with TensorFlow and Keras): :doc:`GCN on Cora ` +* Introduction to StellarGraph and its graph machine learning workflow (with TensorFlow and Keras): :doc:`GCN on Cora ` * Predicting attributes, such as classifying as a class or label, or regressing to calculate a continuous number: * For nodes/vertices/entities: :doc:`node classification <./node-classification/index>` diff --git a/docs/demos/interpretability/gat-cora-node-link-importance.nblink b/docs/demos/interpretability/gat-cora-node-link-importance.nblink deleted file mode 100644 index ebc6066eb..000000000 --- a/docs/demos/interpretability/gat-cora-node-link-importance.nblink +++ /dev/null @@ -1,3 +0,0 @@ -{ - "path": "../../../demos/interpretability/gat-cora-node-link-importance.ipynb" -} diff --git a/docs/demos/interpretability/gat-node-link-importance.nblink b/docs/demos/interpretability/gat-node-link-importance.nblink new file mode 100644 index 000000000..2b09659b8 --- /dev/null +++ b/docs/demos/interpretability/gat-node-link-importance.nblink @@ -0,0 +1,3 @@ +{ + "path": "../../../demos/interpretability/gat-node-link-importance.ipynb" +} diff --git a/docs/demos/interpretability/gat/index.txt b/docs/demos/interpretability/gat/index.txt deleted file mode 100644 index 9f7411e1a..000000000 --- a/docs/demos/interpretability/gat/index.txt +++ /dev/null @@ -1,12 +0,0 @@ -GAT -==================================== - -Table of contents ------------------ - -.. toctree:: - :titlesonly: - :glob: - - */index - ./* diff --git a/docs/demos/interpretability/gcn-cora-node-link-importance.nblink b/docs/demos/interpretability/gcn-cora-node-link-importance.nblink deleted file mode 100644 index bc81c442c..000000000 --- a/docs/demos/interpretability/gcn-cora-node-link-importance.nblink +++ /dev/null @@ -1,3 +0,0 @@ -{ - "path": "../../../demos/interpretability/gcn-cora-node-link-importance.ipynb" -} diff --git a/docs/demos/interpretability/gcn-node-link-importance.nblink b/docs/demos/interpretability/gcn-node-link-importance.nblink new file mode 100644 index 000000000..1e4c8eade --- /dev/null +++ b/docs/demos/interpretability/gcn-node-link-importance.nblink @@ -0,0 +1,3 @@ +{ + "path": "../../../demos/interpretability/gcn-node-link-importance.ipynb" +} diff --git a/docs/demos/interpretability/gcn-sparse-cora-node-link-importance.nblink b/docs/demos/interpretability/gcn-sparse-cora-node-link-importance.nblink deleted file mode 100644 index 5ac14dd78..000000000 --- a/docs/demos/interpretability/gcn-sparse-cora-node-link-importance.nblink +++ /dev/null @@ -1,3 +0,0 @@ -{ - "path": "../../../demos/interpretability/gcn-sparse-cora-node-link-importance.ipynb" -} diff --git a/docs/demos/interpretability/gcn-sparse-node-link-importance.nblink b/docs/demos/interpretability/gcn-sparse-node-link-importance.nblink new file mode 100644 index 000000000..21abc6b5f --- /dev/null +++ b/docs/demos/interpretability/gcn-sparse-node-link-importance.nblink @@ -0,0 +1,3 @@ +{ + "path": "../../../demos/interpretability/gcn-sparse-node-link-importance.ipynb" +} diff --git a/docs/demos/interpretability/gcn/index.txt b/docs/demos/interpretability/gcn/index.txt deleted file mode 100644 index 45194da1d..000000000 --- a/docs/demos/interpretability/gcn/index.txt +++ /dev/null @@ -1,12 +0,0 @@ -GCN -==================================== - -Table of contents ------------------ - -.. toctree:: - :titlesonly: - :glob: - - */index - ./* diff --git a/docs/demos/interpretability/index.txt b/docs/demos/interpretability/index.txt index 3acf0b589..c6d34d1ad 100644 --- a/docs/demos/interpretability/index.txt +++ b/docs/demos/interpretability/index.txt @@ -15,11 +15,11 @@ This table lists interpretability demos, including the algorithms used. * - demo - algorithm(s) - * - :doc:`GCN (dense) ` + * - :doc:`GCN (dense) ` - GCN, Integrated Gradients - * - :doc:`GCN (sparse) ` + * - :doc:`GCN (sparse) ` - GCN, Integrated Gradients - * - :doc:`GAT ` + * - :doc:`GAT ` - GAT, Integrated Gradients diff --git a/docs/demos/link-prediction/attri2vec/index.txt b/docs/demos/link-prediction/attri2vec/index.txt deleted file mode 100644 index 3eb7dfac5..000000000 --- a/docs/demos/link-prediction/attri2vec/index.txt +++ /dev/null @@ -1,75 +0,0 @@ -attri2vec Link Prediction for Out-of-sample Nodes -================================================= - -This is an example of using the attri2vec [1] model, with a link classifier on top, -to predict links for out-of-sample nodes in a homogeneous citation network. - -In this demo, we first train the attri2vec model on the in-sample subgraph and infer -representations for out-of-sample nodes with the trained attri2vec model. Then we use the -obtained node representations to perform link prediction for out-of-sample nodes. - -The link prediction problem is treated as a supervised binary classification problem for -``(src, dst)`` node pairs that make up links in the graph, with positive examples -representing links that do exist in the graph, and negative examples representing -links that don't. - -In this example, we learn to predict citation links between papers in a DBLP dataset (see below). - -Requirements ------------- - -This example assumes the ``stellargraph`` library and its requirements have been -installed by following the installation instructions in the README -of the library's `root directory `_. - -DBLP dataset ------------- - -This example is tested on the DBLP dataset. The attri2vec model assumes that node -features are available. - -The following is the description of the dataset: - -.. - - The DBLP citation network is a subgraph extracted from DBLP-Citation-network V3 (https://aminer.org/citation). - To form this subgraph, papers from four subjects are extracted according to their venue information: - Database, Data Mining, Artificial Intelligence and Computer Vision, and papers with no citations are removed. - The DBLP network contains 18,448 papers and 45,661 citation relations. From paper titles, we construct - 2,476-dimensional binary node feature vectors, with each element indicating the presence/absence of the corresponding word. - By ignoring the citation direction, we take the DBLP subgraph as an undirected network. - - -Download and unzip the `DBLP.zip `_ file to a location on your computer -and pass this location as a command line argument to this script. - -Running the notebook --------------------- - -The narrated version of this example is available in the ``stellargraph-attri2vec-DBLP.ipynb`` notebook. -To run the notebook: - - -* Activate the python 3.6 environment in which the - ``stellargraph`` library is installed -* Start ``jupyter-notebook`` - - * note: you may need to first install ``jupyter`` by running ``pip install jupyter`` in your python environment - -* Navigate to the notebook (``/demos/link-prediction/attri2vec/stellargraph-attri2vec-DBLP.ipynb``), and click on - it to launch the notebook. - -References ----------- - -[1] Attributed Network Embedding via Subspace Discovery. D. Zhang, J, Yin, X. Zhu and C. Zhang, arXiv:1901.04095, [cs.SI], 2019. (`link `_) - -Table of contents ------------------ - -.. toctree:: - :titlesonly: - :glob: - - */index - ./* diff --git a/docs/demos/link-prediction/gcn/index.txt b/docs/demos/link-prediction/gcn/index.txt deleted file mode 100644 index 45194da1d..000000000 --- a/docs/demos/link-prediction/gcn/index.txt +++ /dev/null @@ -1,12 +0,0 @@ -GCN -==================================== - -Table of contents ------------------ - -.. toctree:: - :titlesonly: - :glob: - - */index - ./* diff --git a/docs/demos/link-prediction/graphsage/index.txt b/docs/demos/link-prediction/graphsage/index.txt deleted file mode 100644 index 70313160e..000000000 --- a/docs/demos/link-prediction/graphsage/index.txt +++ /dev/null @@ -1,56 +0,0 @@ -Graphsage Link Prediction -========================= - -This is an example of using the GraphSAGE [1] model, with a link classifier on top, -to predict links in a homogeneous citation network. - -The link prediction problem is treated as a supervised binary classification problem for -``(src, dst)`` node pairs that make up links in the graph, with positive examples -representing links that do exist in the graph, and negative examples representing -links that don't. - -In this example, we learn to predict citation links between papers in a Cora dataset (see below). - -Requirements ------------- - -This example assumes the ``stellargraph`` library and its requirements have been -installed by following the installation instructions in the README -of the library's `root directory `_. - -CORA dataset ------------- - -Currently this example is tested on the CORA dataset. The GraphSAGE model assumes that node -features are available. - -Running the notebook --------------------- - -The narrated version of this example is available in the ``cora-links-example.ipynb`` notebook. -To run the notebook: - - -* Activate the python 3.6 environment in which the - ``stellargraph`` library is installed -* Start ``jupyter-notebook`` - - * note: you may need to first install ``jupyter`` by running ``pip install jupyter`` in your python environment - -* Navigate to the notebook (``/demos/link-prediction/graphsage/cora-links-example.ipynb``), and click on - it to launch the notebook. - -References ----------- - -[1] W. L. Hamilton, R. Ying, and J. Leskovec, “Inductive representation learning on large graphs,” presented at NIPS 2017 (`arXiv:1706.02216 `_). - -Table of contents ------------------ - -.. toctree:: - :titlesonly: - :glob: - - */index - ./* diff --git a/docs/demos/link-prediction/hinsage/index.txt b/docs/demos/link-prediction/hinsage/index.txt deleted file mode 100644 index 6773c3571..000000000 --- a/docs/demos/link-prediction/hinsage/index.txt +++ /dev/null @@ -1,64 +0,0 @@ -Hinsage Recommender -- Movielens Example -======================================== - -This is an example of using Heterogeneous GraphSAGE [1] (HinSAGE) as a hybrid recommender -system, predicting user-movie ratings for the Movielens dataset. - -Requirements ------------- - -This example assumes the ``stellargraph`` library and its requirements have been -installed by following the installation instructions in the README -of the library's `root directory `_. - -MovieLens Data --------------- - -The MovieLens data contains a bipartite graph of Movies and Users, and edges -between them denoting reviews with scores ranging from 1 to 5. - -Getting the data -^^^^^^^^^^^^^^^^ - -The data for this example is the MovieLens dataset of movie ratings -collected from the MovieLens web site (http://movielens.org). -The dataset of 100,000 ratings from 943 users on 1682 movies -can be downloaded from `this link `_. - -To run the examples, extract the data into a directory, -and adjust the command line below to have ``--data_path`` pointing -to the data directory. - -Running the notebook --------------------- - -The narrated version of this example is available in the ``movielens-recommender.ipynb`` notebook. -To run through the notebook, you need to launch jupyter notebook: - - -* Activate the python 3.6 environment in which the - ``stellargraph`` library is installed -* Run the following command ``jupyter-notebook``, and note the ip address and port - number at which is it listening (normally it should be http://127.0.0.1:8888/) - - * note: you may need to first install ``jupyter`` by running ``pip install jupyter`` in your python environment - -* Copy-paste the ip address obtained in the previous step into your browser. You should see - a directory structure of the ``stellargraph`` library. -* Navigate to ``/demos/link-prediction-hinsage/movielens-recommender.ipynb``, and click on - it to launch the notebook. - -References ----------- - -[1] W. L. Hamilton, R. Ying, and J. Leskovec, “Inductive representation learning on large graphs,” presented at NIPS 2017 (`arXiv:1706.02216 `_). - -Table of contents ------------------ - -.. toctree:: - :titlesonly: - :glob: - - */index - ./* diff --git a/docs/demos/link-prediction/index.txt b/docs/demos/link-prediction/index.txt index c85ea995d..d0016c2aa 100644 --- a/docs/demos/link-prediction/index.txt +++ b/docs/demos/link-prediction/index.txt @@ -20,42 +20,42 @@ This table lists all node classification demos, including the algorithms trained - Node features - Heterogeneous - Temporal - * - :doc:`GCN ` + * - :doc:`GCN ` - GCN - yes - - - * - :doc:`Attri2Vec ` + * - :doc:`Attri2Vec ` - Attri2Vec - yes - - - * - :doc:`GraphSAGE ` + * - :doc:`GraphSAGE ` - GraphSAGE - yes - - - * - :doc:`HinSAGE ` + * - :doc:`HinSAGE ` - HinSAGE - yes - yes - - * - :doc:`Node2Vec ` + * - :doc:`Node2Vec ` - Node2Vec - - - - * - :doc:`CTDNE ` + * - :doc:`CTDNE ` - CTDNE - - - yes - * - :doc:`ComplEx ` + * - :doc:`ComplEx ` - ComplEx - - yes, multiple edge types - - * - :doc:`DistMult ` + * - :doc:`DistMult ` - DistMult - - yes, multiple edge types diff --git a/docs/demos/link-prediction/knowledge-graphs/index.txt b/docs/demos/link-prediction/knowledge-graphs/index.txt deleted file mode 100644 index a11002729..000000000 --- a/docs/demos/link-prediction/knowledge-graphs/index.txt +++ /dev/null @@ -1,12 +0,0 @@ -Knowledge Graphs -==================================== - -Table of contents ------------------ - -.. toctree:: - :titlesonly: - :glob: - - */index - ./* diff --git a/docs/demos/link-prediction/random-walks/index.txt b/docs/demos/link-prediction/random-walks/index.txt deleted file mode 100644 index b7fdf8c86..000000000 --- a/docs/demos/link-prediction/random-walks/index.txt +++ /dev/null @@ -1,151 +0,0 @@ -Link Prediction demo -==================== - -The notebook ``cora-lp-demo.ipynb`` demonstrates how to predict citation links/edges between papers in the homogeneous CORA dataset using the random walk-based representation learning method Node2Vec. - -The main.py script runs link prediction on a homogeneous or heterogeneous graph. When -the graph is heterogeneous, it can optionally be treated as homogeneous for representation learning; in -this case, the link prediction script can be thought of as a baseline for more advanced -algorithms that do not simplify the input graph. - -In addition, for heterogeneous graphs, the link prediction script gives the user some control over what edge -types to predict including a choice of filtering these edges by one of their attributes. Currently, the script only -allows filtering by a date attribute in the format **dd/mm/yyyy**\ , e.g., *10/10/2005*. The edge attribute holding the date -can be given any text label in the graph, e.g., 'date', 'timestamp', 'start date', etc. - -For example, given a heterogeneous network with nodes representing **people** and **products**\ , and links connecting people with products -(\ **purchased**\ ) and people with people (\ **friend**\ ), then a user can ask that links of type **friend** be predicted. In addition, -if links of type **friend** have a **date** property, for example, in the range *01/01/2000* to *01/01/2010*\ , then a user -can ask that links to be predicted should occur after *01/01/2005*. That is link data with a date before *01/01/2005* are -used for training, and data after that same date are put aside for predicting/testing. - -Requirements ------------- - -This example assumes the ``stellargraph`` library and its requirements have been -installed by following the installation instructions in the README -of the library's `root directory `_. - -Usage -^^^^^ - -Command Line Arguments -~~~~~~~~~~~~~~~~~~~~~~ - -The script accepts the following command line arguments: - - -* ``input_graph `` The directory where the graph is stored, either as an edge list or a pickled networkx object. -* ``output_node_features `` The file where the node features from representation learning are written - for future reference. -* ``subsample`` If specified, the graph is subsampled (number of nodes reduced) by a default 0.1 factor, e.g, - 10 percent of the original graph. This option is useful for speeding up testing on large graphs. -* ``subgraph_size `` Valid values are in the interval (0, 1]. It reduces the graph size by the given factor. - Size reduction is performed by reducing the number of nodes in the graph by the given factor and removing all other - nodes and edges connecting those nodes. -* ``sampling_method `` Valid values are 'local' and 'global'. Specifies how pairs of nodes that are not connected are - selected as negative edge samples. The 'global' method, selects pairs of nodes uniformly at random from all nodes in - the graph that are not connected by an edge. The 'local' methods first samples a distance (number of edges) from a - source node (selected uniformly at random from all nodes int he graph) and then selects the first node at this distance - as the target node for the negative edge sample. The distance is sampled based on a probability distribution that can - be specified using the probs command line parameter. -* ``sampling_probs `` The probability distribution for sampling distances between - source and target nodes. The first value should always be 0.0 and the remaining values should sum to one. An example for - sampling target nodes up to 4 edges away from source is ``"0.0, 0.25, 0.25, 0.5"``. -* ``p `` If specified, it indicates the number of positive and negative edges to be used for training - the link prediction classifier. The value indicates a percentage with respect to the relevant number of - edges in the input graph. The default value is 0.1 and valid values are in the range (0,1). -* ``hin`` If specified, it indicates that the input graph is heterogeneous. If not specified, a heterogeneous graph is - simplified to homogeneous and the options ``edge_type``, ``edge_attribute_label``, ``edge_attribute_threshold``, and - ``attribute_is_datetime`` are ignored even if given. -* ``metapaths `` For heterogeneous graphs (must specify ``hin`` option), this option can be used to specify the - metapaths for the random walks. A metapath is a ``,`` separated list of node labels; more than one metapaths can - be specified separated by a ``;``. An example specifying 2 metapaths assuming node labels ``author, paper, venue`` is - ``"author, paper, author; author, paper, venue, paper, author"``. -* ``edge_type `` For heterogeneous graphs, this option is used to specify the type of edge (by its label) to - predict. -* ``edge_attribute_label `` For heterogeneous graphs, this option is used to specify the edges that should be - predicted based on an attribute; the only valid attribute is a date in the format dd/mm/yyyy, e.g., 10/2/2018. This - option should be used together with ``edge_type``. -* ``attribute_is_datetime`` If specified together with ``edge_attribute_label`` it indicates that the type of attribute - to use for selecting edges to predict is a date with format dd/mm/yyyy. Currently, only date attributes are allowed so - this flag should always specified together with ``edge_attribute_label``. Later implementations will support numeric - edge attributes in additions to dates. -* ``edge_attribute_threshold `` For heterogeneous graphs and used together with ``edge_attribute_label`` it specifies - a value (date as only dates are currently supported) for edges to predict. -* ``show_hist`` If this flag is specified, then a histogram of the distances between source and target nodes comprising - negative edge samples is plotted. - -Examples -~~~~~~~~ - -For the examples we use 2 different datasets. The **Cora** dataset that is a homogeneous network and the -**BlogCatalog3** dataset that is a heterogeneous network. - -**Cora** can be downloaded from `here: `_ - -.. code-block:: - - from stellargraph.datasets import Cora - Cora().download() - -**BlogCatalog3** can be downloaded from `here. `_ - -The **BlogCatalog3** dataset must be loaded into a ``networkx`` graph object. The ``stellargraph`` library provides a -utility method, ``stellargraph.datasets.BlogCatalog3.load()``, that loads the dataset, -and returns a ``StellarGraph`` graph object. The following 3 lines of code will prepare the dataset for use in the below examples. - -.. code-block:: - - import networkx as nx - import os - from stellargraph.datasets import BlogCatalog3 - g = BlogCatalog3().load() - nx.write_gpickle(g.to_networkx(), os.path.expanduser('~/data/BlogCatalog3.gpickle')) - -**Example 1: Homogeneous graph with global sampling method for negative example** - -.. code-block:: - - python main.py --input_graph=~/stellargraph-datasets/cora/cora.cites --output_node_features=~/data/cora.emb --sampling_method='global' - -**Example 2: Homogeneous graph with local sampling method for negative examples** - -.. code-block:: - - python main.py --input_graph=~/stellargraph-datasets/cora/cora.cites --output_node_features=~/data/cora.emb --sampling_method='local' --sampling_probs="0.0, 0.0, 0.0, 0.5, 0.5" - -**Example 3: Heterogeneous graph treated as homogeneous** - -.. code-block:: - - python main.py --input_graph=~/data/BlogCatalog3.gpickle --output_node_features=~/data/bc3.emb --sampling_method='global' - -**Example 4: Heterogeneous graph predicting edges based on edge type** - -.. code-block:: - - python main.py --hin --input_graph=~/data/BlogCatalog3.gpickle --output_node_features=~/data/bc3.emb --edge_type="friend" --sampling_method='global' - -References -^^^^^^^^^^ - - -#. - Node2Vec: Scalable Feature Learning for Networks. A. Grover, J. Leskovec. ACM SIGKDD International Conference on Knowledge Discovery and Data Mining (KDD), 2016. - -#. - Metapath2Vec: Scalable Representation Learning for Heterogeneous Networks. Yuxiao Dong, Nitesh V. Chawla, and Ananthram Swami. ACM SIGKDD International Conference on Knowledge Discovery and Data Mining (KDD), 135–144, 2017 - -#. - Social Computing Data Repository at ASU [http://socialcomputing.asu.edu]. R. Zafarani and H. Liu, (2009). Tempe, AZ: Arizona State University, School of Computing, Informatics and Decision Systems Engineering. - -Table of contents ------------------ - -.. toctree:: - :titlesonly: - :glob: - - */index - ./* diff --git a/docs/demos/node-classification/attri2vec/index.txt b/docs/demos/node-classification/attri2vec/index.txt deleted file mode 100644 index 6be7dca8b..000000000 --- a/docs/demos/node-classification/attri2vec/index.txt +++ /dev/null @@ -1,45 +0,0 @@ -Node classification using attri2vec [1] -======================================= - -This folder contains a `Jupyter `_ python notebook demonstrating the combined use of -``stellargraph`` (this library) and ``Scikit-learn`` [2] libraries for node classification in a homogeneous graph -attached with node attributes. - -The example demonstrates node representation learning and node classification using the citeseer -paper citation network. This demo is included in the Jupyter notebook -``attri2vec-citeseer-node-classification-example.ipynb``. - -The notebook includes all the information for downloading the corresponding dataset, training the attri2vec -model and using it to classify nodes with unknown (to the training algorithm) labels. - -To run the notebook, install Jupyter to the same Python 3.6 environment as StellarGraph, following the instructions on -the Jupyter project website: http://jupyter.org/install.html - -After starting the Jupyter server on your computer, load the notebook and follow the instructions inside. - -Requirements ------------- - -The example uses Python 3.6 and the StellarGraph library. To install the StellarGraph library -follow the instructions at: https://github.com/stellargraph/stellargraph - -Additional requirements are Pandas, Numpy and Scikit-Learn which are installed as dependencies -of the StellarGraph library. In addition, Juptyer is required to run the notebook version of -the example. - -References ----------- - -**1.** Attributed Network Embedding via Subspace Discovery. D. Zhang, J, Yin, X. Zhu and C. Zhang, arXiv:1901.04095, [cs.SI], 2019. (`link `_) - -**2.** Scikit-learn: Machine learning in Python (link `_) - -Table of contents ------------------ - -.. toctree:: - :titlesonly: - :glob: - - */index - ./* diff --git a/docs/demos/node-classification/cluster-gcn/index.txt b/docs/demos/node-classification/cluster-gcn/index.txt deleted file mode 100644 index 2784cef31..000000000 --- a/docs/demos/node-classification/cluster-gcn/index.txt +++ /dev/null @@ -1,12 +0,0 @@ -Cluster Gcn -==================================== - -Table of contents ------------------ - -.. toctree:: - :titlesonly: - :glob: - - */index - ./* diff --git a/docs/demos/node-classification/gat/index.txt b/docs/demos/node-classification/gat/index.txt deleted file mode 100644 index 4a5d590be..000000000 --- a/docs/demos/node-classification/gat/index.txt +++ /dev/null @@ -1,40 +0,0 @@ -GAT for Node Classification -=========================== - -This is an example of using the Graph Attention network (GAT) algorithm [1] for semi-supervised node classification -in a homogeneous network. - -Requirements ------------- - -All examples use Python 3.6 and the StellarGraph library. To install the StellarGraph library -follow the instructions at: https://github.com/stellargraph/stellargraph - -Additional requirements are Pandas, Numpy and Scikit-Learn which are installed as depdendencies -of the StellarGraph library. In addition Juptyer is required to run the notebook version of -the example. - -Running the notebook --------------------- - -The same example is also available as a Juptyer notebook. To use this install Jupyter to the -same Python 3.6 environment as StellarGraph, following the instructions on the Jupyter project -website: http://jupyter.org/install.html - -After starting the Jupyter server on your computer, load the notebook -``gat-cora-node-classification-example.ipynb`` and follow the instructions inside. - -References ----------- - -[1] Graph Attention Networks. P. Velickovic et al. ICLR 2018 (`link `_) - -Table of contents ------------------ - -.. toctree:: - :titlesonly: - :glob: - - */index - ./* diff --git a/docs/demos/node-classification/gcn/index.txt b/docs/demos/node-classification/gcn/index.txt deleted file mode 100644 index e0b7329b5..000000000 --- a/docs/demos/node-classification/gcn/index.txt +++ /dev/null @@ -1,30 +0,0 @@ -GCN for Node Classification -=========================== - -This is an example of using the Graph Convolutional network (GCN) algorithm [1] for semi-supervised node classification -in a homogeneous network. - -Requirements ------------- - -All examples use Python 3.6 and the StellarGraph library. To install the StellarGraph library -follow the instructions at: https://github.com/stellargraph/stellargraph - -Additional requirements are Pandas, Numpy and Scikit-Learn which are installed as depdendencies -of the StellarGraph library. - -References ----------- - -[1] Semi-Supervised Classification with Graph Convolutional Networks. T. Kipf, M. Welling. -ICLR 2017. arXiv:1609.02907 (`link `_) - -Table of contents ------------------ - -.. toctree:: - :titlesonly: - :glob: - - */index - ./* diff --git a/docs/demos/node-classification/graphsage/index.txt b/docs/demos/node-classification/graphsage/index.txt deleted file mode 100644 index 430037c57..000000000 --- a/docs/demos/node-classification/graphsage/index.txt +++ /dev/null @@ -1,52 +0,0 @@ -GraphSAGE Node Classification -============================= - -This folder includes two examples of using the GraphSAGE algorithm [1] for semi-supervised node classification in -homogeneous networks. - -The first example demonstrates transductive node classification using the Cora citation network. This demo is included -as the Python script ``graphsage-cora-example.py`` and as the Jupyter -notebook ``graphsage-cora-node-classification-example.ipynb``. - -The second example demonstrates inductive representation learning and node classification using the Pubmed-Diabetes -paper citation network. This demo is included in the Jupyter notebook -``graphsage-pubmed-inductive-node-classification-example.ipynb``. - -The two Jupyter notebooks include all the information for downloading the corresponding datasets, training the GraphSAGE -models and using them to classify nodes with unknown (to the training algorithm) labels. - -To run the notebooks install Jupyter to the same Python 3.6 environment as StellarGraph, following the instructions on -the Jupyter project website: http://jupyter.org/install.html - -After starting the Jupyter server on your computer, load either of the two notebooks and follow the instructions inside. - -Requirements ------------- - -All examples use Python 3.6 and the StellarGraph library. To install the StellarGraph library -follow the instructions at: https://github.com/stellargraph/stellargraph - -Additional requirements are Pandas, Numpy and Scikit-Learn which are installed as depdendencies -of the StellarGraph library. In addition Juptyer is required to run the notebook version of -the example. - -CORA dataset ------------- - -Currently the examples in this directory are tested on the CORA dataset. The GraphSAGE model assumes that node -features are available for all nodes in the graph. - -References ----------- - -[1] W. L. Hamilton, R. Ying, and J. Leskovec, “Inductive representation learning on large graphs,” presented at NIPS 2017 (`arXiv:1706.02216 `_). - -Table of contents ------------------ - -.. toctree:: - :titlesonly: - :glob: - - */index - ./* diff --git a/docs/demos/node-classification/hinsage/index.txt b/docs/demos/node-classification/hinsage/index.txt deleted file mode 100644 index 10c30d72f..000000000 --- a/docs/demos/node-classification/hinsage/index.txt +++ /dev/null @@ -1,82 +0,0 @@ - -HinSAGE Node Classification -=========================== - -This is an example of using a Heterogenous extension to the GraphSAGE algorithm [1], called HinSAGE, -to classify the nodes in a heterogeneous network (a network with multiple node and link types). - -This example uses the Yelp dataset and aims to predict the 'elite' status of users. It does this -as a binary classification task predicting if the user has had 'elite' status in any year or has -never had 'elite' status. - -Requirements ------------- - -Install the StellarGraph library following the instructions at: -https://github.com/stellargraph/stellargraph - -Additional requirements are Pandas, Numpy and Scikit-Learn. These are installed as depdendencies -of the StellarGraph library. - -Yelp dataset ------------- - -Currently the examples in this directory use the Yelp dataset. -The Yelp dataset can be obtained by navigating to https://www.yelp.com/dataset, -selecting "Download Dataset" and signing the licence agreement. -Then, download the JSON dataset and uncompress it to an appropriate location -in your filesystem. - -There are several different versions of the dataset, enumerated by "rounds", -to check which round the dataset is, look for the file named "Yelp_Dataset_Challenge_Round_XX.pdf" -where "XX" is the round number. The current script supports rounds 12 and 13. -The path to the Yelp dataset used below should contain the JSON files including -``yelp_academic_dataset_user.json`` or ``user.json`` depending on the round number. - -The example code uses a preprocessed version of the dataset that is generated -by the ``yelp-preprocessing.py`` script. -To run this script, specify: -the path to the Yelp dataset that you downloaded (\ ``-l``\ ), -the output directory (\ ``-o``\ ), -and the round number (\ ``-r``\ , which defaults to 13). - -Example usage: - -.. code-block:: - - python yelp-preprocessing.py -r XX -l -o . - -By default the script will filter the graph to contain only businesses in the state -of Wisconsin. To change this to another state, or to "false" to use the entire dataset -(warning: this will make the machine learning example run very slowly and will require a lot of -memory as the entire graph will be loaded). - -Example usage to run without filtering: - -.. code-block:: - - python yelp-preprocessing.py -l -o . --filter_state=false - -Running the example -------------------- - -The example script can be run on supplying the location of the preprocessed Yelp dataset. - -Example usage: - -.. code-block:: - - python yelp-example.py -l - -Additional command line arguments are available to tune the training of the model, to see a -description of these arguments use the ``--help`` argument: - -.. code-block:: - - python yelp-example.py --help - -References ----------- - -[1] W. L. Hamilton, R. Ying, and J. Leskovec, “Inductive representation learning on large graphs,” presented at NIPS 2017 -(\ `arXiv:1706.02216 `_\ ). diff --git a/docs/demos/node-classification/index.txt b/docs/demos/node-classification/index.txt index 53433f71e..413fcce3e 100644 --- a/docs/demos/node-classification/index.txt +++ b/docs/demos/node-classification/index.txt @@ -23,7 +23,7 @@ This table lists all node classification demos, including the algorithms trained - Edge weights - Inductive - Node embeddings - * - :doc:`GCN ` + * - :doc:`GCN ` - GCN - yes - @@ -31,7 +31,7 @@ This table lists all node classification demos, including the algorithms trained - - - yes - * - :doc:`Cluster-GCN ` + * - :doc:`Cluster-GCN ` - Cluster-GCN - yes - @@ -39,7 +39,7 @@ This table lists all node classification demos, including the algorithms trained - - - yes - * - :doc:`RGCN ` + * - :doc:`RGCN ` - RGCN - yes - yes, multiple edge types @@ -47,7 +47,7 @@ This table lists all node classification demos, including the algorithms trained - - - yes - * - :doc:`GAT ` + * - :doc:`GAT ` - GAT - yes - @@ -55,7 +55,7 @@ This table lists all node classification demos, including the algorithms trained - - - yes - * - :doc:`SGC ` + * - :doc:`SGC ` - SGC - yes - @@ -63,7 +63,7 @@ This table lists all node classification demos, including the algorithms trained - - - yes - * - :doc:`PPNP & APPNP ` + * - :doc:`PPNP & APPNP ` - PPNP, APPNP - yes - @@ -71,7 +71,7 @@ This table lists all node classification demos, including the algorithms trained - - - - * - :doc:`Attri2Vec ` + * - :doc:`Attri2Vec ` - Attri2Vec - yes - @@ -79,7 +79,7 @@ This table lists all node classification demos, including the algorithms trained - - - yes - * - :doc:`GraphSAGE on Cora ` + * - :doc:`GraphSAGE on Cora ` - GraphSAGE - yes - @@ -87,7 +87,7 @@ This table lists all node classification demos, including the algorithms trained - - - yes - * - :doc:`Inductive GraphSAGE ` + * - :doc:`Inductive GraphSAGE ` - GraphSAGE - yes - @@ -95,7 +95,7 @@ This table lists all node classification demos, including the algorithms trained - - yes - yes - * - :doc:`Directed GraphSAGE ` + * - :doc:`Directed GraphSAGE ` - GraphSAGE - yes - @@ -103,15 +103,7 @@ This table lists all node classification demos, including the algorithms trained - - - yes - * - :doc:`HinSAGE ` - - HinSAGE - - yes - - yes - - - - - - - - - * - :doc:`Node2Vec ` + * - :doc:`Node2Vec ` - Node2Vec - - @@ -119,7 +111,7 @@ This table lists all node classification demos, including the algorithms trained - - - yes - * - :doc:`Weighted Node2Vec ` + * - :doc:`Weighted Node2Vec ` - Node2Vec - - diff --git a/docs/demos/node-classification/node2vec/index.txt b/docs/demos/node-classification/node2vec/index.txt deleted file mode 100644 index 8790deac9..000000000 --- a/docs/demos/node-classification/node2vec/index.txt +++ /dev/null @@ -1,35 +0,0 @@ -Node classification using Node2Vec [1] -====================================== - -This folder contains two `Jupyter `_ python notebooks demonstrating the combined use of -``stellargraph`` (this library), ``Gensim`` [4], and ``Scikit-learn`` [3] libraries for node classification in a -homogeneous graph. - -The examples demonstrate how to calculate node embedding vectors in just a few lines of Python code using the -``Node2Vec`` [1] algorithm on both weighted and unweighted graphs. - -The learned node representations are then used in a node classification task. Specifically, the example demonstrates -how to predict the subject of a research paper given a paper citation network. The latter is a homogeneous graph -with nodes representing research papers that have a single attribute, namely the subject of the paper. Links in the -graph represent a citation relationship between two papers, i.e., ``paper A`` cites ``paper B``. The graph is -treated as undirected. - -References ----------- - -**1.** Node2Vec: Scalable Feature Learning for Networks. A. Grover, J. Leskovec. ACM SIGKDD International Conference -on Knowledge Discovery and Data Mining (KDD), 2016. (`link `_) - -**2.** Gensim: Topic modelling for humans. (`link `_) - -**3.** Scikit-learn: Machine learning in Python (`link `_) - -Table of contents ------------------ - -.. toctree:: - :titlesonly: - :glob: - - */index - ./* diff --git a/docs/demos/node-classification/ppnp/index.txt b/docs/demos/node-classification/ppnp/index.txt deleted file mode 100644 index cf21563fa..000000000 --- a/docs/demos/node-classification/ppnp/index.txt +++ /dev/null @@ -1,29 +0,0 @@ -PPNP and APPNP for Node Classification -====================================== - -This is an example of using the Personalized Propogation of Neural Predictions (PPNP) and Approximate PPNP (APPNP) -algorithms [1] for semi-supervised node classification in a homogeneous network. - -Requirements ------------- - -All examples use Python 3.6 and the StellarGraph library. To install the StellarGraph library -follow the instructions at: https://github.com/stellargraph/stellargraph - -Additional requirements are Pandas, Numpy, Keras, and Scikit-Learn which are installed as depdendencies -of the StellarGraph library. - -References ----------- - -[1] Predict then propagate: Graph neural networks meet personalized PageRank. J. Klicpera, A. Bojchevski, and S. Günnemann, S., ICLR, 2019. (`link `_) - -Table of contents ------------------ - -.. toctree:: - :titlesonly: - :glob: - - */index - ./* diff --git a/docs/demos/node-classification/rgcn/index.txt b/docs/demos/node-classification/rgcn/index.txt deleted file mode 100644 index fbdfec4af..000000000 --- a/docs/demos/node-classification/rgcn/index.txt +++ /dev/null @@ -1,12 +0,0 @@ -RGCN -==================================== - -Table of contents ------------------ - -.. toctree:: - :titlesonly: - :glob: - - */index - ./* diff --git a/docs/demos/node-classification/sgc/index.txt b/docs/demos/node-classification/sgc/index.txt deleted file mode 100644 index 38d03ec0a..000000000 --- a/docs/demos/node-classification/sgc/index.txt +++ /dev/null @@ -1,12 +0,0 @@ -SGC -==================================== - -Table of contents ------------------ - -.. toctree:: - :titlesonly: - :glob: - - */index - ./* diff --git a/docs/demos/time-series/index.txt b/docs/demos/time-series/index.txt index b76315a7e..96e1ba14b 100644 --- a/docs/demos/time-series/index.txt +++ b/docs/demos/time-series/index.txt @@ -18,7 +18,7 @@ This table lists all representation learning demos, including the algorithms tra * - demo - algorithm(s) - task - * - :doc:`Graph Convolution + LSTM ` + * - :doc:`Graph Convolution + LSTM ` - GraphConvolutionLSTM (T-GCN) - traffic prediction From 7fdff315fbc9b6f3b867a41a9e9a49e5fa3da039 Mon Sep 17 00:00:00 2001 From: Huon Wilson Date: Mon, 4 May 2020 19:28:39 +1000 Subject: [PATCH 22/43] black --- scripts/demo_table.py | 37 ++++++++++++------------------------- 1 file changed, 12 insertions(+), 25 deletions(-) diff --git a/scripts/demo_table.py b/scripts/demo_table.py index a16e1e4e7..b13e77a63 100644 --- a/scripts/demo_table.py +++ b/scripts/demo_table.py @@ -362,9 +362,7 @@ def via_rl(link=None): features=True, temporal="see T-GCN", nc=T(link="node-classification/gcn-node-classification"), - interpretability_nc=T( - link="interpretability/gcn-node-link-importance" - ), + interpretability_nc=T(link="interpretability/gcn-node-link-importance"), lp=T(link="link-prediction/gcn-link-prediction"), rl=[rl_us(), rl_dgi()], inductive="see Cluster-GCN", @@ -394,9 +392,7 @@ def via_rl(link=None): T("GAT", details="Graph ATtention Network (GAT)"), features=True, nc=T(link="node-classification/gat-node-classification"), - interpretability_nc=T( - link="interpretability/gat-node-link-importance" - ), + interpretability_nc=T(link="interpretability/gat-node-link-importance"), lp=True, rl=[rl_us(), rl_dgi()], ), @@ -429,27 +425,22 @@ def via_rl(link=None): Algorithm( "Attri2Vec", features=True, - nc=T( - link="node-classification/attri2vec-node-classification" - ), + nc=T(link="node-classification/attri2vec-node-classification"), lp=T(link="link-prediction/attri2vec-link-prediction"), rl=T(link="embeddings/attri2vec-embeddings"), ), Algorithm( "GraphSAGE", heterogeneous="see HinSAGE", - directed=T( - link="node-classification/directed-graphsage-node-classification" - ), + directed=T(link="node-classification/directed-graphsage-node-classification"), features=True, - nc=T( - link="node-classification/graphsage-node-classification" - ), + nc=T(link="node-classification/graphsage-node-classification"), lp=T(link="link-prediction/graphsage-link-prediction"), - rl=[rl_us(link="embeddings/graphsage-unsupervised-sampler-embeddings"), rl_dgi()], - inductive=T( - link="node-classification/graphsage-inductive-node-classification" - ), + rl=[ + rl_us(link="embeddings/graphsage-unsupervised-sampler-embeddings"), + rl_dgi(), + ], + inductive=T(link="node-classification/graphsage-inductive-node-classification"), ), Algorithm( "HinSAGE", @@ -462,12 +453,8 @@ def via_rl(link=None): ), Algorithm( "Node2Vec", - weighted=T( - link="node-classification/node2vec-weighted-node-classification" - ), - nc=via_rl( - link="node-classification/node2vec-node-classification" - ), + weighted=T(link="node-classification/node2vec-weighted-node-classification"), + nc=via_rl(link="node-classification/node2vec-node-classification"), lp=via_rl(link="link-prediction/node2vec-link-prediction"), rl=T(link="embeddings/node2vec-embeddings"), ), From 0da2dd41b68587f45b6129f92978aee1f11cd292 Mon Sep 17 00:00:00 2001 From: Huon Wilson Date: Mon, 4 May 2020 19:44:18 +1000 Subject: [PATCH 23/43] Make demo titles and indexing more consistent --- demos/calibration/calibration-pubmed-link-prediction.ipynb | 2 +- demos/calibration/calibration-pubmed-node-classification.ipynb | 2 +- .../neo4j/directed-graphsage-on-cora-neo4j-example.ipynb | 2 +- demos/connector/neo4j/load-cora-into-neo4j.ipynb | 2 +- .../neo4j/undirected-graphsage-on-cora-neo4j-example.ipynb | 2 +- demos/embeddings/deep-graph-infomax-cora.ipynb | 2 +- demos/embeddings/embeddings-unsupervised-graphsage-cora.ipynb | 2 +- demos/embeddings/graphwave-barbell.ipynb | 2 +- demos/embeddings/stellargraph-attri2vec-citeseer.ipynb | 2 +- demos/embeddings/stellargraph-metapath2vec.ipynb | 2 +- demos/embeddings/stellargraph-node2vec.ipynb | 2 +- demos/ensembles/ensemble-link-prediction-example.ipynb | 2 +- demos/ensembles/ensemble-node-classification-example.ipynb | 2 +- demos/graph-classification/dgcnn-graph-classification.ipynb | 2 +- .../graph-classification/supervised-graph-classification.ipynb | 2 +- demos/interpretability/gat/node-link-importance-demo-gat.ipynb | 2 +- .../gcn/node-link-importance-demo-gcn-sparse.ipynb | 2 +- demos/interpretability/gcn/node-link-importance-demo-gcn.ipynb | 2 +- .../link-prediction/attri2vec/stellargraph-attri2vec-DBLP.ipynb | 2 +- demos/link-prediction/gcn/cora-gcn-links-example.ipynb | 2 +- demos/link-prediction/graphsage/cora-links-example.ipynb | 2 +- demos/link-prediction/hinsage/movielens-recommender.ipynb | 2 +- demos/link-prediction/knowledge-graphs/complex.ipynb | 2 +- demos/link-prediction/knowledge-graphs/distmult.ipynb | 2 +- demos/link-prediction/random-walks/cora-lp-demo.ipynb | 2 +- demos/link-prediction/random-walks/ctdne-link-prediction.ipynb | 2 +- .../attri2vec-citeseer-node-classification-example.ipynb | 2 +- .../cluster-gcn/cluster-gcn-node-classification.ipynb | 2 +- .../gat/gat-cora-node-classification-example.ipynb | 2 +- .../gcn/gcn-cora-node-classification-example.ipynb | 2 +- .../graphsage/directed-graphsage-on-cora-example.ipynb | 2 +- .../graphsage/graphsage-cora-node-classification-example.ipynb | 2 +- ...graphsage-pubmed-inductive-node-classification-example.ipynb | 2 +- .../node2vec/stellargraph-node2vec-node-classification.ipynb | 2 +- .../node2vec/stellargraph-node2vec-weighted-random-walks.ipynb | 2 +- .../ppnp/ppnp-cora-node-classification-example.ipynb | 2 +- .../rgcn/rgcn-aifb-node-classification-example.ipynb | 2 +- .../sgc/sgc-node-classification-example.ipynb | 2 +- docs/demos/embeddings/index.txt | 2 +- docs/demos/ensembles/index.txt | 2 +- docs/demos/graph-classification/index.txt | 2 +- docs/demos/interpretability/index.txt | 2 +- docs/demos/link-prediction/index.txt | 2 +- docs/demos/node-classification/index.txt | 2 +- 44 files changed, 44 insertions(+), 44 deletions(-) diff --git a/demos/calibration/calibration-pubmed-link-prediction.ipynb b/demos/calibration/calibration-pubmed-link-prediction.ipynb index b07536430..a46d8f4c9 100644 --- a/demos/calibration/calibration-pubmed-link-prediction.ipynb +++ b/demos/calibration/calibration-pubmed-link-prediction.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Link prediction example and calibration: GraphSAGE on the PubMed-Diabetes citation dataset" + "# Calibrating a GraphSAGE link prediction model" ] }, { diff --git a/demos/calibration/calibration-pubmed-node-classification.ipynb b/demos/calibration/calibration-pubmed-node-classification.ipynb index 188e10ad6..ccce15ff5 100644 --- a/demos/calibration/calibration-pubmed-node-classification.ipynb +++ b/demos/calibration/calibration-pubmed-node-classification.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Node Attribute Inference (multi-class) using GraphSAGE and the Pubmed-Diabetes citation network with calibration" + "# Calibrating a GraphSAGE node classification model" ] }, { diff --git a/demos/connector/neo4j/directed-graphsage-on-cora-neo4j-example.ipynb b/demos/connector/neo4j/directed-graphsage-on-cora-neo4j-example.ipynb index ef3f77e13..9a8aab654 100644 --- a/demos/connector/neo4j/directed-graphsage-on-cora-neo4j-example.ipynb +++ b/demos/connector/neo4j/directed-graphsage-on-cora-neo4j-example.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Stellargraph example: directed CORA citation network with directed GraphSAGE and Neo4J.\n" + "# Directed GraphSAGE with Neo4j, on Cora\n" ] }, { diff --git a/demos/connector/neo4j/load-cora-into-neo4j.ipynb b/demos/connector/neo4j/load-cora-into-neo4j.ipynb index c6f1f5d77..037778067 100644 --- a/demos/connector/neo4j/load-cora-into-neo4j.ipynb +++ b/demos/connector/neo4j/load-cora-into-neo4j.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Notebook demo on loading Cora dataset into Neo4J Database\n" + "# Loading Cora dataset into Neo4J database\n" ] }, { diff --git a/demos/connector/neo4j/undirected-graphsage-on-cora-neo4j-example.ipynb b/demos/connector/neo4j/undirected-graphsage-on-cora-neo4j-example.ipynb index 1023f7c68..c2030eb7a 100644 --- a/demos/connector/neo4j/undirected-graphsage-on-cora-neo4j-example.ipynb +++ b/demos/connector/neo4j/undirected-graphsage-on-cora-neo4j-example.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Undirected GraphSAGE on the CORA citation network using StellarGraph and Neo4j" + "# GraphSAGE with Neo4j, on Cora" ] }, { diff --git a/demos/embeddings/deep-graph-infomax-cora.ipynb b/demos/embeddings/deep-graph-infomax-cora.ipynb index b02dfba8f..c022d2ddc 100644 --- a/demos/embeddings/deep-graph-infomax-cora.ipynb +++ b/demos/embeddings/deep-graph-infomax-cora.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# GCN Deep Graph Infomax on CORA\n" + "# Node representation learning with Deep Graph Infomax\n" ] }, { diff --git a/demos/embeddings/embeddings-unsupervised-graphsage-cora.ipynb b/demos/embeddings/embeddings-unsupervised-graphsage-cora.ipynb index fce875ca7..6ab32bd05 100644 --- a/demos/embeddings/embeddings-unsupervised-graphsage-cora.ipynb +++ b/demos/embeddings/embeddings-unsupervised-graphsage-cora.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Graph representation learning through Unsupervised GraphSAGE\n" + "# Node representation learning with GraphSAGE and UnsupervisedSampler\n" ] }, { diff --git a/demos/embeddings/graphwave-barbell.ipynb b/demos/embeddings/graphwave-barbell.ipynb index cbdee152c..c8576c013 100644 --- a/demos/embeddings/graphwave-barbell.ipynb +++ b/demos/embeddings/graphwave-barbell.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# GraphWave aglorithm on a barbell graph\n" + "# Node representations with GraphWave\n" ] }, { diff --git a/demos/embeddings/stellargraph-attri2vec-citeseer.ipynb b/demos/embeddings/stellargraph-attri2vec-citeseer.ipynb index 2fc94825f..16615f384 100644 --- a/demos/embeddings/stellargraph-attri2vec-citeseer.ipynb +++ b/demos/embeddings/stellargraph-attri2vec-citeseer.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Node Representation Learning with attri2vec on Citeseer" + "# Node Representation learning with attri2vec" ] }, { diff --git a/demos/embeddings/stellargraph-metapath2vec.ipynb b/demos/embeddings/stellargraph-metapath2vec.ipynb index 020c1eea4..9445817fe 100644 --- a/demos/embeddings/stellargraph-metapath2vec.ipynb +++ b/demos/embeddings/stellargraph-metapath2vec.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Node representation learning with Metapath2Vec on BlogCatalog3\n" + "# Node representation learning with Metapath2Vec\n" ] }, { diff --git a/demos/embeddings/stellargraph-node2vec.ipynb b/demos/embeddings/stellargraph-node2vec.ipynb index 04c5cf09d..2a32190d3 100644 --- a/demos/embeddings/stellargraph-node2vec.ipynb +++ b/demos/embeddings/stellargraph-node2vec.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Node representation learning with Node2Vec on Cora\n" + "# Node representation learning with Node2Vec\n" ] }, { diff --git a/demos/ensembles/ensemble-link-prediction-example.ipynb b/demos/ensembles/ensemble-link-prediction-example.ipynb index f31044050..26f38fbd4 100644 --- a/demos/ensembles/ensemble-link-prediction-example.ipynb +++ b/demos/ensembles/ensemble-link-prediction-example.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# StellarGraph Ensemble for link prediction" + "# Ensemble models for link prediction" ] }, { diff --git a/demos/ensembles/ensemble-node-classification-example.ipynb b/demos/ensembles/ensemble-node-classification-example.ipynb index 94f0b44bf..c61b374db 100644 --- a/demos/ensembles/ensemble-node-classification-example.ipynb +++ b/demos/ensembles/ensemble-node-classification-example.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Stellargraph Ensembles for node attribute inference\n" + "# Ensemble models for node classification\n" ] }, { diff --git a/demos/graph-classification/dgcnn-graph-classification.ipynb b/demos/graph-classification/dgcnn-graph-classification.ipynb index 7b1731a1f..0806308b9 100644 --- a/demos/graph-classification/dgcnn-graph-classification.ipynb +++ b/demos/graph-classification/dgcnn-graph-classification.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Supervised graph classification with Deep Graph Convolutional Neural Networks" + "# Supervised graph classification with Deep Graph CNN" ] }, { diff --git a/demos/graph-classification/supervised-graph-classification.ipynb b/demos/graph-classification/supervised-graph-classification.ipynb index 8e67c6788..9f7fdd12f 100644 --- a/demos/graph-classification/supervised-graph-classification.ipynb +++ b/demos/graph-classification/supervised-graph-classification.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Supervised graph classification example\n" + "# Supervised graph classification with GCN\n" ] }, { diff --git a/demos/interpretability/gat/node-link-importance-demo-gat.ipynb b/demos/interpretability/gat/node-link-importance-demo-gat.ipynb index 6fab50708..5971b7d3a 100644 --- a/demos/interpretability/gat/node-link-importance-demo-gat.ipynb +++ b/demos/interpretability/gat/node-link-importance-demo-gat.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Interpreting Nodes and Edges by Saliency Maps in GAT\n" + "# Interpreting nodes and edges with saliency maps in GAT\n" ] }, { diff --git a/demos/interpretability/gcn/node-link-importance-demo-gcn-sparse.ipynb b/demos/interpretability/gcn/node-link-importance-demo-gcn-sparse.ipynb index 9ac1d3207..259d0ffd8 100644 --- a/demos/interpretability/gcn/node-link-importance-demo-gcn-sparse.ipynb +++ b/demos/interpretability/gcn/node-link-importance-demo-gcn-sparse.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Interpreting Nodes and Edges by Saliency Maps in GCN (sparse)\n" + "# Interpreting nodes and edges with saliency maps in GCN (sparse)\n" ] }, { diff --git a/demos/interpretability/gcn/node-link-importance-demo-gcn.ipynb b/demos/interpretability/gcn/node-link-importance-demo-gcn.ipynb index 17fdb56ef..b3ff6fc38 100644 --- a/demos/interpretability/gcn/node-link-importance-demo-gcn.ipynb +++ b/demos/interpretability/gcn/node-link-importance-demo-gcn.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Interpreting Nodes and Edges by Saliency Maps in GCN\n" + "# Interpreting nodes and edges with saliency maps in GCN\n" ] }, { diff --git a/demos/link-prediction/attri2vec/stellargraph-attri2vec-DBLP.ipynb b/demos/link-prediction/attri2vec/stellargraph-attri2vec-DBLP.ipynb index 8ce10bc9e..8c71601ea 100644 --- a/demos/link-prediction/attri2vec/stellargraph-attri2vec-DBLP.ipynb +++ b/demos/link-prediction/attri2vec/stellargraph-attri2vec-DBLP.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Inductive Node Representation Learning through attri2vec" + "# Link prediction via inductive node representations with attri2vec" ] }, { diff --git a/demos/link-prediction/gcn/cora-gcn-links-example.ipynb b/demos/link-prediction/gcn/cora-gcn-links-example.ipynb index 47c0acb76..95ae6ff54 100644 --- a/demos/link-prediction/gcn/cora-gcn-links-example.ipynb +++ b/demos/link-prediction/gcn/cora-gcn-links-example.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Link prediction example: GCN on the Cora citation dataset" + "# Link prediction with GCN" ] }, { diff --git a/demos/link-prediction/graphsage/cora-links-example.ipynb b/demos/link-prediction/graphsage/cora-links-example.ipynb index 40de335f4..f60ba8655 100644 --- a/demos/link-prediction/graphsage/cora-links-example.ipynb +++ b/demos/link-prediction/graphsage/cora-links-example.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Link prediction example: GraphSAGE on the Cora citation dataset" + "# Link prediction with GraphSAGE" ] }, { diff --git a/demos/link-prediction/hinsage/movielens-recommender.ipynb b/demos/link-prediction/hinsage/movielens-recommender.ipynb index 89f17ca91..746d5660d 100644 --- a/demos/link-prediction/hinsage/movielens-recommender.ipynb +++ b/demos/link-prediction/hinsage/movielens-recommender.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Stellargraph example: Heterogeneous GraphSAGE on the Movielens recommendation dataset" + "# Link prediction with Heterogeneous GraphSAGE (HinSAGE)" ] }, { diff --git a/demos/link-prediction/knowledge-graphs/complex.ipynb b/demos/link-prediction/knowledge-graphs/complex.ipynb index f5127dbc0..b0913a3b3 100644 --- a/demos/link-prediction/knowledge-graphs/complex.ipynb +++ b/demos/link-prediction/knowledge-graphs/complex.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# ComplEx on WN18 and FB15K\n" + "# Knowledge graph link prediction with ComplEx\n" ] }, { diff --git a/demos/link-prediction/knowledge-graphs/distmult.ipynb b/demos/link-prediction/knowledge-graphs/distmult.ipynb index 1c8461318..f005f9252 100644 --- a/demos/link-prediction/knowledge-graphs/distmult.ipynb +++ b/demos/link-prediction/knowledge-graphs/distmult.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# DistMult on WN18 and FB15K" + "# Knowledge graph link prediction with DistMult" ] }, { diff --git a/demos/link-prediction/random-walks/cora-lp-demo.ipynb b/demos/link-prediction/random-walks/cora-lp-demo.ipynb index f68f83b10..84390ea83 100644 --- a/demos/link-prediction/random-walks/cora-lp-demo.ipynb +++ b/demos/link-prediction/random-walks/cora-lp-demo.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Link prediction with Node2Vec on Cora" + "# Link prediction with Node2Vec" ] }, { diff --git a/demos/link-prediction/random-walks/ctdne-link-prediction.ipynb b/demos/link-prediction/random-walks/ctdne-link-prediction.ipynb index 491ab0389..acebc3cd8 100644 --- a/demos/link-prediction/random-walks/ctdne-link-prediction.ipynb +++ b/demos/link-prediction/random-walks/ctdne-link-prediction.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Continuous-Time Dynamic Network Embeddings\n" + "# Link prediction with Continuous-Time Dynamic Network Embeddings (CTDNE)\n" ] }, { diff --git a/demos/node-classification/attri2vec/attri2vec-citeseer-node-classification-example.ipynb b/demos/node-classification/attri2vec/attri2vec-citeseer-node-classification-example.ipynb index 5058dd500..57317d56c 100644 --- a/demos/node-classification/attri2vec/attri2vec-citeseer-node-classification-example.ipynb +++ b/demos/node-classification/attri2vec/attri2vec-citeseer-node-classification-example.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Node Representation Learning with attri2vec on Citeseer" + "# Node classification via node representations with attri2vec" ] }, { diff --git a/demos/node-classification/cluster-gcn/cluster-gcn-node-classification.ipynb b/demos/node-classification/cluster-gcn/cluster-gcn-node-classification.ipynb index 8b26456ee..d88e003a4 100644 --- a/demos/node-classification/cluster-gcn/cluster-gcn-node-classification.ipynb +++ b/demos/node-classification/cluster-gcn/cluster-gcn-node-classification.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Cluster-GCN for node classification" + "# Node classification with Cluster-GCN" ] }, { diff --git a/demos/node-classification/gat/gat-cora-node-classification-example.ipynb b/demos/node-classification/gat/gat-cora-node-classification-example.ipynb index 61fcb3a3f..820390341 100644 --- a/demos/node-classification/gat/gat-cora-node-classification-example.ipynb +++ b/demos/node-classification/gat/gat-cora-node-classification-example.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Stellargraph example: Graph Attention Network (GAT) on the CORA citation dataset" + "# Node classification with Graph ATtention Network (GAT)" ] }, { diff --git a/demos/node-classification/gcn/gcn-cora-node-classification-example.ipynb b/demos/node-classification/gcn/gcn-cora-node-classification-example.ipynb index aab10a621..b7eca41a0 100644 --- a/demos/node-classification/gcn/gcn-cora-node-classification-example.ipynb +++ b/demos/node-classification/gcn/gcn-cora-node-classification-example.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Graph Convolutional Network (GCN) on the CORA citation dataset\n", + "# Node classification with Graph Convolutional Network (GCN)\n", "\n", "> This demo explains how to do node classification using the StellarGraph library. [See all other demos](../../README.md).\n" ] diff --git a/demos/node-classification/graphsage/directed-graphsage-on-cora-example.ipynb b/demos/node-classification/graphsage/directed-graphsage-on-cora-example.ipynb index e27a7c783..afc48e95d 100644 --- a/demos/node-classification/graphsage/directed-graphsage-on-cora-example.ipynb +++ b/demos/node-classification/graphsage/directed-graphsage-on-cora-example.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Stellargraph example: Fully directed GraphSAGE on a directed CORA citation network\n" + "# Node classification with directed GraphSAGE\n" ] }, { diff --git a/demos/node-classification/graphsage/graphsage-cora-node-classification-example.ipynb b/demos/node-classification/graphsage/graphsage-cora-node-classification-example.ipynb index b6a007b45..86dfe7110 100644 --- a/demos/node-classification/graphsage/graphsage-cora-node-classification-example.ipynb +++ b/demos/node-classification/graphsage/graphsage-cora-node-classification-example.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Stellargraph example: GraphSAGE on the CORA citation network" + "# Node classification with GraphSAGE" ] }, { diff --git a/demos/node-classification/graphsage/graphsage-pubmed-inductive-node-classification-example.ipynb b/demos/node-classification/graphsage/graphsage-pubmed-inductive-node-classification-example.ipynb index 952b6d019..72443f1db 100644 --- a/demos/node-classification/graphsage/graphsage-pubmed-inductive-node-classification-example.ipynb +++ b/demos/node-classification/graphsage/graphsage-pubmed-inductive-node-classification-example.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Inductive representation learning using GraphSAGE on the Pubmed-Diabetes citation network \n" + "# Inductive node classification and representation learning using GraphSAGE\n" ] }, { diff --git a/demos/node-classification/node2vec/stellargraph-node2vec-node-classification.ipynb b/demos/node-classification/node2vec/stellargraph-node2vec-node-classification.ipynb index 1bee8f2ad..5c64cc9a8 100644 --- a/demos/node-classification/node2vec/stellargraph-node2vec-node-classification.ipynb +++ b/demos/node-classification/node2vec/stellargraph-node2vec-node-classification.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Node classification with Node2Vec on Cora\n" + "# Node classification with Node2Vec\n" ] }, { diff --git a/demos/node-classification/node2vec/stellargraph-node2vec-weighted-random-walks.ipynb b/demos/node-classification/node2vec/stellargraph-node2vec-weighted-random-walks.ipynb index e65f9dc63..fdb010728 100644 --- a/demos/node-classification/node2vec/stellargraph-node2vec-weighted-random-walks.ipynb +++ b/demos/node-classification/node2vec/stellargraph-node2vec-weighted-random-walks.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Node2Vec with weighted random walks" + "# Node classification with weighted Node2Vec" ] }, { diff --git a/demos/node-classification/ppnp/ppnp-cora-node-classification-example.ipynb b/demos/node-classification/ppnp/ppnp-cora-node-classification-example.ipynb index 88bac203b..457f8ec45 100644 --- a/demos/node-classification/ppnp/ppnp-cora-node-classification-example.ipynb +++ b/demos/node-classification/ppnp/ppnp-cora-node-classification-example.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Stellargraph example: Personalised Propagation of Neural Predictions (PPNP) and Approximate PPNP (APPNP) on the CORA citation dataset" + "# Node classification with Personalised Propagation of Neural Predictions (PPNP) and Approximate PPNP (APPNP)" ] }, { diff --git a/demos/node-classification/rgcn/rgcn-aifb-node-classification-example.ipynb b/demos/node-classification/rgcn/rgcn-aifb-node-classification-example.ipynb index 619df97f3..9dbaa3106 100644 --- a/demos/node-classification/rgcn/rgcn-aifb-node-classification-example.ipynb +++ b/demos/node-classification/rgcn/rgcn-aifb-node-classification-example.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Stellargraph example: Relational Graph Convolutional Network (RGCN) on the AIFB relational dataset\n" + "# Node classification with Relational Graph Convolutional Network (RGCN)\n" ] }, { diff --git a/demos/node-classification/sgc/sgc-node-classification-example.ipynb b/demos/node-classification/sgc/sgc-node-classification-example.ipynb index eda6df18b..e78d20e3d 100644 --- a/demos/node-classification/sgc/sgc-node-classification-example.ipynb +++ b/demos/node-classification/sgc/sgc-node-classification-example.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Stellargraph example: Simplified Graph Convolutions (SGC) on the CORA citation dataset" + "# Node classification with Simplified Graph Convolutions (SGC)" ] }, { diff --git a/docs/demos/embeddings/index.txt b/docs/demos/embeddings/index.txt index eae9379e8..363e17646 100644 --- a/docs/demos/embeddings/index.txt +++ b/docs/demos/embeddings/index.txt @@ -1,4 +1,4 @@ -Representation learning using StellarGraph +Representation learning ========================================== `StellarGraph `_ provides numerous algorithms for doing node and edge representation learning on graphs. This folder contains demos of all of them to explain how they work and how to use them as part of a TensorFlow Keras data science workflow. diff --git a/docs/demos/ensembles/index.txt b/docs/demos/ensembles/index.txt index cc7a94a7e..1f23bebe4 100644 --- a/docs/demos/ensembles/index.txt +++ b/docs/demos/ensembles/index.txt @@ -1,4 +1,4 @@ -Ensemble learning for graph neural network algorithms +Ensemble learning ===================================================== This folder contains two `Jupyter `_ python notebooks demonstrating the use of ensemble learning diff --git a/docs/demos/graph-classification/index.txt b/docs/demos/graph-classification/index.txt index fc235537f..e1e44c32e 100644 --- a/docs/demos/graph-classification/index.txt +++ b/docs/demos/graph-classification/index.txt @@ -1,4 +1,4 @@ -Graph classification using StellarGraph +Graph classification ======================================= `StellarGraph `_ provides algorithms for graph classification. This folder contains demos to explain how they work and how to use them as part of a TensorFlow Keras data science workflow. diff --git a/docs/demos/interpretability/index.txt b/docs/demos/interpretability/index.txt index 3acf0b589..223274052 100644 --- a/docs/demos/interpretability/index.txt +++ b/docs/demos/interpretability/index.txt @@ -1,4 +1,4 @@ -Interpretability of node classification results using StellarGraph +Interpretability of node classification results ================================================================== `StellarGraph `_ has support for inspecting several different algorithms for :doc:`node classification <../node-classification/index>` to understand or interpret how they came to a decision. This folder contains demos of all of them to explain how they work and how to use them as part of a TensorFlow Keras data science workflow. diff --git a/docs/demos/link-prediction/index.txt b/docs/demos/link-prediction/index.txt index c85ea995d..d4f649099 100644 --- a/docs/demos/link-prediction/index.txt +++ b/docs/demos/link-prediction/index.txt @@ -1,4 +1,4 @@ -Link prediction using StellarGraph +Link prediction ================================== `StellarGraph `_ provides numerous algorithms for doing link prediction on graphs. This folder contains demos of all of them to explain how they work and how to use them as part of a TensorFlow Keras data science workflow. diff --git a/docs/demos/node-classification/index.txt b/docs/demos/node-classification/index.txt index 53433f71e..356f988b3 100644 --- a/docs/demos/node-classification/index.txt +++ b/docs/demos/node-classification/index.txt @@ -1,4 +1,4 @@ -Node classification using StellarGraph +Node classification ====================================== `StellarGraph `_ provides numerous algorithms for doing node classification on graphs. This folder contains demos of all of them to explain how they work and how to use them as part of a TensorFlow Keras data science workflow. From bfc7ad9e014c0187a9e5fa74f8741d64a5d5797b Mon Sep 17 00:00:00 2001 From: Huon Wilson Date: Mon, 4 May 2020 19:52:53 +1000 Subject: [PATCH 24/43] Reformat --- demos/interpretability/gat-node-link-importance.ipynb | 4 ++-- demos/interpretability/gcn-node-link-importance.ipynb | 4 ++-- demos/interpretability/gcn-sparse-node-link-importance.ipynb | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/demos/interpretability/gat-node-link-importance.ipynb b/demos/interpretability/gat-node-link-importance.ipynb index 60c909fdf..33c21bc7d 100644 --- a/demos/interpretability/gat-node-link-importance.ipynb +++ b/demos/interpretability/gat-node-link-importance.ipynb @@ -15,7 +15,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/interpretability/gat-cora-node-link-importance.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/interpretability/gat-cora-node-link-importance.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/interpretability/gat-node-link-importance.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/interpretability/gat-node-link-importance.ipynb)" ] }, { @@ -1059,7 +1059,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/interpretability/gat-cora-node-link-importance.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/interpretability/gat-cora-node-link-importance.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/interpretability/gat-node-link-importance.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/interpretability/gat-node-link-importance.ipynb)" ] } ], diff --git a/demos/interpretability/gcn-node-link-importance.ipynb b/demos/interpretability/gcn-node-link-importance.ipynb index 97fd4dbda..0401de5ad 100644 --- a/demos/interpretability/gcn-node-link-importance.ipynb +++ b/demos/interpretability/gcn-node-link-importance.ipynb @@ -15,7 +15,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/interpretability/gcn-cora-node-link-importance.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/interpretability/gcn-cora-node-link-importance.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/interpretability/gcn-node-link-importance.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/interpretability/gcn-node-link-importance.ipynb)" ] }, { @@ -1085,7 +1085,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/interpretability/gcn-cora-node-link-importance.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/interpretability/gcn-cora-node-link-importance.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/interpretability/gcn-node-link-importance.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/interpretability/gcn-node-link-importance.ipynb)" ] } ], diff --git a/demos/interpretability/gcn-sparse-node-link-importance.ipynb b/demos/interpretability/gcn-sparse-node-link-importance.ipynb index e68102813..6c40bf8f9 100644 --- a/demos/interpretability/gcn-sparse-node-link-importance.ipynb +++ b/demos/interpretability/gcn-sparse-node-link-importance.ipynb @@ -15,7 +15,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/interpretability/gcn-sparse-cora-node-link-importance.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/interpretability/gcn-sparse-cora-node-link-importance.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/interpretability/gcn-sparse-node-link-importance.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/interpretability/gcn-sparse-node-link-importance.ipynb)" ] }, { @@ -1059,7 +1059,7 @@ ] }, "source": [ - "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/interpretability/gcn-sparse-cora-node-link-importance.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/interpretability/gcn-sparse-cora-node-link-importance.ipynb)" + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/interpretability/gcn-sparse-node-link-importance.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/interpretability/gcn-sparse-node-link-importance.ipynb)" ] } ], From 2b62830b0f4573cbdc119dc3de38759400153af1 Mon Sep 17 00:00:00 2001 From: Huon Wilson Date: Mon, 4 May 2020 19:54:47 +1000 Subject: [PATCH 25/43] Fix readme link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2790884cd..98f629b0f 100644 --- a/README.md +++ b/README.md @@ -166,7 +166,7 @@ model.fit(generator.flow(train_targets.index, train_targets), epochs=5) print(f"Test set: loss = {loss}, accuracy = {accuracy}") ``` -This algorithm is spelled out in more detail in [its extended narrated notebook](https://github.com/stellargraph/stellargraph/tree/master/demos/node-classification/gcn/gcn-cora-node-classification-example.ipynb). We provide [many more algorithms, each with a detailed example](https://github.com/stellargraph/stellargraph/tree/master/demos/). +This algorithm is spelled out in more detail in [its extended narrated notebook](https://github.com/stellargraph/stellargraph/tree/master/demos/node-classification/gcn-node-classification.ipynb). We provide [many more algorithms, each with a detailed example](https://github.com/stellargraph/stellargraph/tree/master/demos/). ## Algorithms The StellarGraph library currently includes the following algorithms for graph machine learning: From 5d3348512119febb8833bbe004df8d20370dbef6 Mon Sep 17 00:00:00 2001 From: Huon Wilson Date: Mon, 4 May 2020 20:04:10 +1000 Subject: [PATCH 26/43] Fix case --- demos/embeddings/stellargraph-attri2vec-citeseer.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/demos/embeddings/stellargraph-attri2vec-citeseer.ipynb b/demos/embeddings/stellargraph-attri2vec-citeseer.ipynb index 16615f384..25b40d5a2 100644 --- a/demos/embeddings/stellargraph-attri2vec-citeseer.ipynb +++ b/demos/embeddings/stellargraph-attri2vec-citeseer.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Node Representation learning with attri2vec" + "# Node representation learning with attri2vec" ] }, { From 8de6b2d54306fc3608095794de4880cf0177f78e Mon Sep 17 00:00:00 2001 From: Huon Wilson Date: Mon, 4 May 2020 20:53:52 +1000 Subject: [PATCH 27/43] Add neo4j notebooks back --- .../neo4j/directed-graphsage-on-cora-neo4j-example.nblink | 3 +++ docs/demos/connector/neo4j/load-cora-into-neo4j.nblink | 3 +++ .../neo4j/undirected-graphsage-on-cora-neo4j-example.nblink | 3 +++ 3 files changed, 9 insertions(+) create mode 100644 docs/demos/connector/neo4j/directed-graphsage-on-cora-neo4j-example.nblink create mode 100644 docs/demos/connector/neo4j/load-cora-into-neo4j.nblink create mode 100644 docs/demos/connector/neo4j/undirected-graphsage-on-cora-neo4j-example.nblink diff --git a/docs/demos/connector/neo4j/directed-graphsage-on-cora-neo4j-example.nblink b/docs/demos/connector/neo4j/directed-graphsage-on-cora-neo4j-example.nblink new file mode 100644 index 000000000..95bfccc16 --- /dev/null +++ b/docs/demos/connector/neo4j/directed-graphsage-on-cora-neo4j-example.nblink @@ -0,0 +1,3 @@ +{ + "path": "../../../../demos/connector/neo4j/directed-graphsage-on-cora-neo4j-example.ipynb" +} diff --git a/docs/demos/connector/neo4j/load-cora-into-neo4j.nblink b/docs/demos/connector/neo4j/load-cora-into-neo4j.nblink new file mode 100644 index 000000000..4ade26094 --- /dev/null +++ b/docs/demos/connector/neo4j/load-cora-into-neo4j.nblink @@ -0,0 +1,3 @@ +{ + "path": "../../../../demos/connector/neo4j/load-cora-into-neo4j.ipynb" +} diff --git a/docs/demos/connector/neo4j/undirected-graphsage-on-cora-neo4j-example.nblink b/docs/demos/connector/neo4j/undirected-graphsage-on-cora-neo4j-example.nblink new file mode 100644 index 000000000..d02062a40 --- /dev/null +++ b/docs/demos/connector/neo4j/undirected-graphsage-on-cora-neo4j-example.nblink @@ -0,0 +1,3 @@ +{ + "path": "../../../../demos/connector/neo4j/undirected-graphsage-on-cora-neo4j-example.ipynb" +} From e3058469a19d7d62625bfbb963641d0c6fef5487 Mon Sep 17 00:00:00 2001 From: Huon Wilson Date: Mon, 4 May 2020 21:13:26 +1000 Subject: [PATCH 28/43] Regenerate READMEs --- demos/calibration/README.md | 4 ++-- demos/connector/neo4j/README.md | 6 +++--- demos/embeddings/README.md | 14 +++++++------- demos/ensembles/README.md | 4 ++-- demos/graph-classification/README.md | 4 ++-- demos/interpretability/README.md | 8 ++++---- demos/link-prediction/README.md | 16 ++++++++-------- demos/node-classification/README.md | 24 ++++++++++++------------ demos/time-series/README.md | 2 +- 9 files changed, 41 insertions(+), 41 deletions(-) diff --git a/demos/calibration/README.md b/demos/calibration/README.md index 450e6f950..15df9996a 100644 --- a/demos/calibration/README.md +++ b/demos/calibration/README.md @@ -7,8 +7,8 @@ These demos are displayed with detailed descriptions in the documentation: https | Demo | Source | |---|---| -| [Link prediction example and calibration: GraphSAGE on the PubMed-Diabetes citation dataset](https://stellargraph.readthedocs.io/en/stable/demos/calibration/calibration-pubmed-link-prediction.html) | [source](calibration-pubmed-link-prediction.ipynb) | -| [Node Attribute Inference (multi-class) using GraphSAGE and the Pubmed-Diabetes citation network with calibration](https://stellargraph.readthedocs.io/en/stable/demos/calibration/calibration-pubmed-node-classification.html) | [source](calibration-pubmed-node-classification.ipynb) | +| [Calibrating a GraphSAGE link prediction model](https://stellargraph.readthedocs.io/en/stable/demos/calibration/calibration-link-prediction.html) | [source](calibration-link-prediction.ipynb) | +| [Calibrating a GraphSAGE node classification model](https://stellargraph.readthedocs.io/en/stable/demos/calibration/calibration-node-classification.html) | [source](calibration-node-classification.ipynb) | The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). diff --git a/demos/connector/neo4j/README.md b/demos/connector/neo4j/README.md index ddb5fcec7..b72090859 100644 --- a/demos/connector/neo4j/README.md +++ b/demos/connector/neo4j/README.md @@ -7,9 +7,9 @@ These demos are displayed with detailed descriptions in the documentation: https | Demo | Source | |---|---| -| [Stellargraph example: directed CORA citation network with directed GraphSAGE and Neo4J.](https://stellargraph.readthedocs.io/en/stable/demos/connector/neo4j/directed-graphsage-on-cora-neo4j-example.html) | [source](directed-graphsage-on-cora-neo4j-example.ipynb) | -| [Notebook demo on loading Cora dataset into Neo4J Database](https://stellargraph.readthedocs.io/en/stable/demos/connector/neo4j/load-cora-into-neo4j.html) | [source](load-cora-into-neo4j.ipynb) | -| [Undirected GraphSAGE on the CORA citation network using StellarGraph and Neo4j](https://stellargraph.readthedocs.io/en/stable/demos/connector/neo4j/undirected-graphsage-on-cora-neo4j-example.html) | [source](undirected-graphsage-on-cora-neo4j-example.ipynb) | +| [Directed GraphSAGE with Neo4j, on Cora](https://stellargraph.readthedocs.io/en/stable/demos/connector/neo4j/directed-graphsage-on-cora-neo4j-example.html) | [source](directed-graphsage-on-cora-neo4j-example.ipynb) | +| [Loading Cora dataset into Neo4J database](https://stellargraph.readthedocs.io/en/stable/demos/connector/neo4j/load-cora-into-neo4j.html) | [source](load-cora-into-neo4j.ipynb) | +| [GraphSAGE with Neo4j, on Cora](https://stellargraph.readthedocs.io/en/stable/demos/connector/neo4j/undirected-graphsage-on-cora-neo4j-example.html) | [source](undirected-graphsage-on-cora-neo4j-example.ipynb) | The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). diff --git a/demos/embeddings/README.md b/demos/embeddings/README.md index c51e9267e..97fd14999 100644 --- a/demos/embeddings/README.md +++ b/demos/embeddings/README.md @@ -7,13 +7,13 @@ These demos are displayed with detailed descriptions in the documentation: https | Demo | Source | |---|---| -| [GCN Deep Graph Infomax on CORA](https://stellargraph.readthedocs.io/en/stable/demos/embeddings/deep-graph-infomax-cora.html) | [source](deep-graph-infomax-cora.ipynb) | -| [Graph representation learning through Unsupervised GraphSAGE](https://stellargraph.readthedocs.io/en/stable/demos/embeddings/embeddings-unsupervised-graphsage-cora.html) | [source](embeddings-unsupervised-graphsage-cora.ipynb) | -| [GraphWave aglorithm on a barbell graph](https://stellargraph.readthedocs.io/en/stable/demos/embeddings/graphwave-barbell.html) | [source](graphwave-barbell.ipynb) | -| [Node Representation Learning with attri2vec on Citeseer](https://stellargraph.readthedocs.io/en/stable/demos/embeddings/stellargraph-attri2vec-citeseer.html) | [source](stellargraph-attri2vec-citeseer.ipynb) | -| [Node representation learning with Metapath2Vec on BlogCatalog3](https://stellargraph.readthedocs.io/en/stable/demos/embeddings/stellargraph-metapath2vec.html) | [source](stellargraph-metapath2vec.ipynb) | -| [Node representation learning with Node2Vec on Cora](https://stellargraph.readthedocs.io/en/stable/demos/embeddings/stellargraph-node2vec.html) | [source](stellargraph-node2vec.ipynb) | -| [Node representation learning with Watch Your Step on Cora](https://stellargraph.readthedocs.io/en/stable/demos/embeddings/watch-your-step-cora-demo.html) | [source](watch-your-step-cora-demo.ipynb) | +| [Node representation learning with attri2vec](https://stellargraph.readthedocs.io/en/stable/demos/embeddings/attri2vec-embeddings.html) | [source](attri2vec-embeddings.ipynb) | +| [Node representation learning with Deep Graph Infomax](https://stellargraph.readthedocs.io/en/stable/demos/embeddings/deep-graph-infomax-embeddings.html) | [source](deep-graph-infomax-embeddings.ipynb) | +| [Node representation learning with GraphSAGE and UnsupervisedSampler](https://stellargraph.readthedocs.io/en/stable/demos/embeddings/graphsage-unsupervised-sampler-embeddings.html) | [source](graphsage-unsupervised-sampler-embeddings.ipynb) | +| [Node representations with GraphWave](https://stellargraph.readthedocs.io/en/stable/demos/embeddings/graphwave-embeddings.html) | [source](graphwave-embeddings.ipynb) | +| [Node representation learning with Metapath2Vec](https://stellargraph.readthedocs.io/en/stable/demos/embeddings/metapath2vec-embeddings.html) | [source](metapath2vec-embeddings.ipynb) | +| [Node representation learning with Node2Vec](https://stellargraph.readthedocs.io/en/stable/demos/embeddings/node2vec-embeddings.html) | [source](node2vec-embeddings.ipynb) | +| [Node representation learning with Watch Your Step on Cora](https://stellargraph.readthedocs.io/en/stable/demos/embeddings/watch-your-step-embeddings.html) | [source](watch-your-step-embeddings.ipynb) | The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). diff --git a/demos/ensembles/README.md b/demos/ensembles/README.md index 3570127bf..e262fd06f 100644 --- a/demos/ensembles/README.md +++ b/demos/ensembles/README.md @@ -7,8 +7,8 @@ These demos are displayed with detailed descriptions in the documentation: https | Demo | Source | |---|---| -| [StellarGraph Ensemble for link prediction](https://stellargraph.readthedocs.io/en/stable/demos/ensembles/ensemble-link-prediction-example.html) | [source](ensemble-link-prediction-example.ipynb) | -| [Stellargraph Ensembles for node attribute inference](https://stellargraph.readthedocs.io/en/stable/demos/ensembles/ensemble-node-classification-example.html) | [source](ensemble-node-classification-example.ipynb) | +| [Ensemble models for link prediction](https://stellargraph.readthedocs.io/en/stable/demos/ensembles/ensemble-link-prediction-example.html) | [source](ensemble-link-prediction-example.ipynb) | +| [Ensemble models for node classification](https://stellargraph.readthedocs.io/en/stable/demos/ensembles/ensemble-node-classification-example.html) | [source](ensemble-node-classification-example.ipynb) | The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). diff --git a/demos/graph-classification/README.md b/demos/graph-classification/README.md index ff04d78b1..6868bb41f 100644 --- a/demos/graph-classification/README.md +++ b/demos/graph-classification/README.md @@ -7,8 +7,8 @@ These demos are displayed with detailed descriptions in the documentation: https | Demo | Source | |---|---| -| [Supervised graph classification with Deep Graph Convolutional Neural Networks](https://stellargraph.readthedocs.io/en/stable/demos/graph-classification/dgcnn-graph-classification.html) | [source](dgcnn-graph-classification.ipynb) | -| [Supervised graph classification example](https://stellargraph.readthedocs.io/en/stable/demos/graph-classification/supervised-graph-classification.html) | [source](supervised-graph-classification.ipynb) | +| [Supervised graph classification with Deep Graph CNN](https://stellargraph.readthedocs.io/en/stable/demos/graph-classification/dgcnn-graph-classification.html) | [source](dgcnn-graph-classification.ipynb) | +| [Supervised graph classification with GCN](https://stellargraph.readthedocs.io/en/stable/demos/graph-classification/gcn-supervised-graph-classification.html) | [source](gcn-supervised-graph-classification.ipynb) | The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). diff --git a/demos/interpretability/README.md b/demos/interpretability/README.md index fc226af9b..29ab089a4 100644 --- a/demos/interpretability/README.md +++ b/demos/interpretability/README.md @@ -7,10 +7,10 @@ These demos are displayed with detailed descriptions in the documentation: https | Demo | Source | |---|---| -| [Interpreting Nodes and Edges by Saliency Maps in GAT](https://stellargraph.readthedocs.io/en/stable/demos/interpretability/gat/node-link-importance-demo-gat.html) | [source](gat/node-link-importance-demo-gat.ipynb) | -| [Intepretability on Hateful Twitter Datasets](https://stellargraph.readthedocs.io/en/stable/demos/interpretability/gcn/hateful-twitters-interpretability.html) | [source](gcn/hateful-twitters-interpretability.ipynb) | -| [Interpreting Nodes and Edges by Saliency Maps in GCN (sparse)](https://stellargraph.readthedocs.io/en/stable/demos/interpretability/gcn/node-link-importance-demo-gcn-sparse.html) | [source](gcn/node-link-importance-demo-gcn-sparse.ipynb) | -| [Interpreting Nodes and Edges by Saliency Maps in GCN](https://stellargraph.readthedocs.io/en/stable/demos/interpretability/gcn/node-link-importance-demo-gcn.html) | [source](gcn/node-link-importance-demo-gcn.ipynb) | +| [Interpreting nodes and edges with saliency maps in GAT](https://stellargraph.readthedocs.io/en/stable/demos/interpretability/gat-node-link-importance.html) | [source](gat-node-link-importance.ipynb) | +| [Interpreting nodes and edges with saliency maps in GCN](https://stellargraph.readthedocs.io/en/stable/demos/interpretability/gcn-node-link-importance.html) | [source](gcn-node-link-importance.ipynb) | +| [Interpreting nodes and edges with saliency maps in GCN (sparse)](https://stellargraph.readthedocs.io/en/stable/demos/interpretability/gcn-sparse-node-link-importance.html) | [source](gcn-sparse-node-link-importance.ipynb) | +| [Intepretability on Hateful Twitter Datasets](https://stellargraph.readthedocs.io/en/stable/demos/interpretability/hateful-twitters-interpretability.html) | [source](hateful-twitters-interpretability.ipynb) | The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). diff --git a/demos/link-prediction/README.md b/demos/link-prediction/README.md index 79d423df6..e4a212eb0 100644 --- a/demos/link-prediction/README.md +++ b/demos/link-prediction/README.md @@ -7,14 +7,14 @@ These demos are displayed with detailed descriptions in the documentation: https | Demo | Source | |---|---| -| [Inductive Node Representation Learning through attri2vec](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/attri2vec/stellargraph-attri2vec-DBLP.html) | [source](attri2vec/stellargraph-attri2vec-DBLP.ipynb) | -| [Link prediction example: GCN on the Cora citation dataset](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/gcn/cora-gcn-links-example.html) | [source](gcn/cora-gcn-links-example.ipynb) | -| [Link prediction example: GraphSAGE on the Cora citation dataset](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/graphsage/cora-links-example.html) | [source](graphsage/cora-links-example.ipynb) | -| [Stellargraph example: Heterogeneous GraphSAGE on the Movielens recommendation dataset](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/hinsage/movielens-recommender.html) | [source](hinsage/movielens-recommender.ipynb) | -| [ComplEx on WN18 and FB15K](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/knowledge-graphs/complex.html) | [source](knowledge-graphs/complex.ipynb) | -| [DistMult on WN18 and FB15K](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/knowledge-graphs/distmult.html) | [source](knowledge-graphs/distmult.ipynb) | -| [Link prediction with Node2Vec on Cora](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/random-walks/cora-lp-demo.html) | [source](random-walks/cora-lp-demo.ipynb) | -| [Continuous-Time Dynamic Network Embeddings](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/random-walks/ctdne-link-prediction.html) | [source](random-walks/ctdne-link-prediction.ipynb) | +| [Link prediction via inductive node representations with attri2vec](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/attri2vec-link-prediction.html) | [source](attri2vec-link-prediction.ipynb) | +| [Knowledge graph link prediction with ComplEx](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/complex-link-prediction.html) | [source](complex-link-prediction.ipynb) | +| [Link prediction with Continuous-Time Dynamic Network Embeddings (CTDNE)](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/ctdne-link-prediction.html) | [source](ctdne-link-prediction.ipynb) | +| [Knowledge graph link prediction with DistMult](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/distmult-link-prediction.html) | [source](distmult-link-prediction.ipynb) | +| [Link prediction with GCN](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/gcn-link-prediction.html) | [source](gcn-link-prediction.ipynb) | +| [Link prediction with GraphSAGE](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/graphsage-link-prediction.html) | [source](graphsage-link-prediction.ipynb) | +| [Link prediction with Heterogeneous GraphSAGE (HinSAGE)](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/hinsage-link-prediction.html) | [source](hinsage-link-prediction.ipynb) | +| [Link prediction with Node2Vec](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/node2vec-link-prediction.html) | [source](node2vec-link-prediction.ipynb) | The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). diff --git a/demos/node-classification/README.md b/demos/node-classification/README.md index bd68dc2f6..7ff65a160 100644 --- a/demos/node-classification/README.md +++ b/demos/node-classification/README.md @@ -7,18 +7,18 @@ These demos are displayed with detailed descriptions in the documentation: https | Demo | Source | |---|---| -| [Node Representation Learning with attri2vec on Citeseer](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/attri2vec/attri2vec-citeseer-node-classification-example.html) | [source](attri2vec/attri2vec-citeseer-node-classification-example.ipynb) | -| [Cluster-GCN for node classification](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/cluster-gcn/cluster-gcn-node-classification.html) | [source](cluster-gcn/cluster-gcn-node-classification.ipynb) | -| [Stellargraph example: Graph Attention Network (GAT) on the CORA citation dataset](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/gat/gat-cora-node-classification-example.html) | [source](gat/gat-cora-node-classification-example.ipynb) | -| [Graph Convolutional Network (GCN) on the CORA citation dataset](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/gcn/gcn-cora-node-classification-example.html) | [source](gcn/gcn-cora-node-classification-example.ipynb) | -| [Stellargraph example: Fully directed GraphSAGE on a directed CORA citation network](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/graphsage/directed-graphsage-on-cora-example.html) | [source](graphsage/directed-graphsage-on-cora-example.ipynb) | -| [Stellargraph example: GraphSAGE on the CORA citation network](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/graphsage/graphsage-cora-node-classification-example.html) | [source](graphsage/graphsage-cora-node-classification-example.ipynb) | -| [Inductive representation learning using GraphSAGE on the Pubmed-Diabetes citation network ](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/graphsage/graphsage-pubmed-inductive-node-classification-example.html) | [source](graphsage/graphsage-pubmed-inductive-node-classification-example.ipynb) | -| [Node classification with Node2Vec on Cora](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/node2vec/stellargraph-node2vec-node-classification.html) | [source](node2vec/stellargraph-node2vec-node-classification.ipynb) | -| [Node2Vec with weighted random walks](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/node2vec/stellargraph-node2vec-weighted-random-walks.html) | [source](node2vec/stellargraph-node2vec-weighted-random-walks.ipynb) | -| [Stellargraph example: Personalised Propagation of Neural Predictions (PPNP) and Approximate PPNP (APPNP) on the CORA citation dataset](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/ppnp/ppnp-cora-node-classification-example.html) | [source](ppnp/ppnp-cora-node-classification-example.ipynb) | -| [Stellargraph example: Relational Graph Convolutional Network (RGCN) on the AIFB relational dataset](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/rgcn/rgcn-aifb-node-classification-example.html) | [source](rgcn/rgcn-aifb-node-classification-example.ipynb) | -| [Stellargraph example: Simplified Graph Convolutions (SGC) on the CORA citation dataset](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/sgc/sgc-node-classification-example.html) | [source](sgc/sgc-node-classification-example.ipynb) | +| [Node classification via node representations with attri2vec](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/attri2vec-node-classification.html) | [source](attri2vec-node-classification.ipynb) | +| [Node classification with Cluster-GCN](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/cluster-gcn-node-classification.html) | [source](cluster-gcn-node-classification.ipynb) | +| [Node classification with directed GraphSAGE](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/directed-graphsage-node-classification.html) | [source](directed-graphsage-node-classification.ipynb) | +| [Node classification with Graph ATtention Network (GAT)](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/gat-node-classification.html) | [source](gat-node-classification.ipynb) | +| [Node classification with Graph Convolutional Network (GCN)](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/gcn-node-classification.html) | [source](gcn-node-classification.ipynb) | +| [Inductive node classification and representation learning using GraphSAGE](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/graphsage-inductive-node-classification.html) | [source](graphsage-inductive-node-classification.ipynb) | +| [Node classification with GraphSAGE](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/graphsage-node-classification.html) | [source](graphsage-node-classification.ipynb) | +| [Node classification with Node2Vec](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/node2vec-node-classification.html) | [source](node2vec-node-classification.ipynb) | +| [Node classification with weighted Node2Vec](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/node2vec-weighted-node-classification.html) | [source](node2vec-weighted-node-classification.ipynb) | +| [Node classification with Personalised Propagation of Neural Predictions (PPNP) and Approximate PPNP (APPNP)](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/ppnp-node-classification.html) | [source](ppnp-node-classification.ipynb) | +| [Node classification with Relational Graph Convolutional Network (RGCN)](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/rgcn-node-classification.html) | [source](rgcn-node-classification.ipynb) | +| [Node classification with Simplified Graph Convolutions (SGC)](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/sgc-node-classification.html) | [source](sgc-node-classification.ipynb) | The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). diff --git a/demos/time-series/README.md b/demos/time-series/README.md index 9d67ea856..75fcf5687 100644 --- a/demos/time-series/README.md +++ b/demos/time-series/README.md @@ -7,7 +7,7 @@ These demos are displayed with detailed descriptions in the documentation: https | Demo | Source | |---|---| -| [Forecasting using spatio-temporal data with combined Graph Convolution + LSTM model](https://stellargraph.readthedocs.io/en/stable/demos/time-series/gcn-lstm-LA.html) | [source](gcn-lstm-LA.ipynb) | +| [Forecasting using spatio-temporal data with combined Graph Convolution + LSTM model](https://stellargraph.readthedocs.io/en/stable/demos/time-series/gcn-lstm-time-series.html) | [source](gcn-lstm-time-series.ipynb) | The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). From 4f05ef511e1d2207257955b8a6b654c5123b9574 Mon Sep 17 00:00:00 2001 From: Huon Wilson Date: Tue, 5 May 2020 08:56:52 +1000 Subject: [PATCH 29/43] Add original notebook for GCN --- .buildkite/pipeline.yml | 2 +- ...gcn-cora-node-classification-example.ipynb | 107 ++++++++++++++++++ 2 files changed, 108 insertions(+), 1 deletion(-) create mode 100644 demos/node-classification/gcn/gcn-cora-node-classification-example.ipynb diff --git a/.buildkite/pipeline.yml b/.buildkite/pipeline.yml index ffcbec6f5..f07447550 100644 --- a/.buildkite/pipeline.yml +++ b/.buildkite/pipeline.yml @@ -83,7 +83,7 @@ steps: <<: *timeout key: "test-notebooks" depends_on: "runner-3_6" - parallelism: 46 + parallelism: 47 command: ".buildkite/steps/test-demo-notebooks.sh" plugins: <<: *plugins diff --git a/demos/node-classification/gcn/gcn-cora-node-classification-example.ipynb b/demos/node-classification/gcn/gcn-cora-node-classification-example.ipynb new file mode 100644 index 000000000..824aff7de --- /dev/null +++ b/demos/node-classification/gcn/gcn-cora-node-classification-example.ipynb @@ -0,0 +1,107 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Node classification with Graph Convolutional Network (GCN)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "tags": [ + "CloudRunner" + ] + }, + "source": [ + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/node-classification/gcn/gcn-cora-node-classification-example.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/node-classification/gcn/gcn-cora-node-classification-example.ipynb)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This notebook has moved to [the parent directory](../gcn-node-classification.ipynb)." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "nbsphinx": "hidden", + "tags": [ + "CloudRunner" + ] + }, + "outputs": [], + "source": [ + "# install StellarGraph if running on Google Colab\n", + "import sys\n", + "if 'google.colab' in sys.modules:\n", + " %pip install -q stellargraph[demos]==1.0.0rc2" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "nbsphinx": "hidden", + "tags": [ + "VersionCheck" + ] + }, + "outputs": [], + "source": [ + "# verify that we're using the correct version of StellarGraph for this notebook\n", + "import stellargraph as sg\n", + "\n", + "try:\n", + " sg.utils.validate_notebook_version(\"1.0.0rc2\")\n", + "except AttributeError:\n", + " raise ValueError(\n", + " f\"This notebook requires StellarGraph version 1.0.0rc2, but a different version {sg.__version__} is installed. Please see .\"\n", + " ) from None" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "markdown", + "metadata": { + "tags": [ + "CloudRunner" + ] + }, + "source": [ + "> Run the master version of this notebook: [![Open In Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/stellargraph/stellargraph/master?urlpath=lab/tree/demos/node-classification/gcn/gcn-cora-node-classification-example.ipynb) [![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/stellargraph/stellargraph/blob/master/demos/node-classification/gcn/gcn-cora-node-classification-example.ipynb)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.9" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} From ff70bb295dd4e29f2449a2c969d2e06d971f11dc Mon Sep 17 00:00:00 2001 From: Huon Wilson Date: Tue, 5 May 2020 09:09:02 +1000 Subject: [PATCH 30/43] Regenerate --- demos/calibration/README.md | 4 ++-- demos/connector/neo4j/README.md | 6 ++--- demos/embeddings/README.md | 12 +++++----- demos/ensembles/README.md | 4 ++-- demos/graph-classification/README.md | 4 ++-- demos/interpretability/README.md | 6 ++--- demos/link-prediction/README.md | 16 ++++++------- demos/link-prediction/attri2vec/README.md | 2 +- demos/link-prediction/graphsage/README.md | 2 +- demos/link-prediction/hinsage/README.md | 2 +- demos/node-classification/README.md | 24 +++++++++---------- demos/node-classification/attri2vec/README.md | 2 +- demos/node-classification/gat/README.md | 2 +- demos/node-classification/gcn/README.md | 2 +- demos/node-classification/graphsage/README.md | 6 ++--- demos/node-classification/node2vec/README.md | 4 ++-- demos/node-classification/ppnp/README.md | 2 +- 17 files changed, 50 insertions(+), 50 deletions(-) diff --git a/demos/calibration/README.md b/demos/calibration/README.md index 450e6f950..d4e39abd7 100644 --- a/demos/calibration/README.md +++ b/demos/calibration/README.md @@ -7,8 +7,8 @@ These demos are displayed with detailed descriptions in the documentation: https | Demo | Source | |---|---| -| [Link prediction example and calibration: GraphSAGE on the PubMed-Diabetes citation dataset](https://stellargraph.readthedocs.io/en/stable/demos/calibration/calibration-pubmed-link-prediction.html) | [source](calibration-pubmed-link-prediction.ipynb) | -| [Node Attribute Inference (multi-class) using GraphSAGE and the Pubmed-Diabetes citation network with calibration](https://stellargraph.readthedocs.io/en/stable/demos/calibration/calibration-pubmed-node-classification.html) | [source](calibration-pubmed-node-classification.ipynb) | +| [Calibrating a GraphSAGE link prediction model](https://stellargraph.readthedocs.io/en/stable/demos/calibration/calibration-pubmed-link-prediction.html) | [source](calibration-pubmed-link-prediction.ipynb) | +| [Calibrating a GraphSAGE node classification model](https://stellargraph.readthedocs.io/en/stable/demos/calibration/calibration-pubmed-node-classification.html) | [source](calibration-pubmed-node-classification.ipynb) | The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). diff --git a/demos/connector/neo4j/README.md b/demos/connector/neo4j/README.md index ddb5fcec7..b72090859 100644 --- a/demos/connector/neo4j/README.md +++ b/demos/connector/neo4j/README.md @@ -7,9 +7,9 @@ These demos are displayed with detailed descriptions in the documentation: https | Demo | Source | |---|---| -| [Stellargraph example: directed CORA citation network with directed GraphSAGE and Neo4J.](https://stellargraph.readthedocs.io/en/stable/demos/connector/neo4j/directed-graphsage-on-cora-neo4j-example.html) | [source](directed-graphsage-on-cora-neo4j-example.ipynb) | -| [Notebook demo on loading Cora dataset into Neo4J Database](https://stellargraph.readthedocs.io/en/stable/demos/connector/neo4j/load-cora-into-neo4j.html) | [source](load-cora-into-neo4j.ipynb) | -| [Undirected GraphSAGE on the CORA citation network using StellarGraph and Neo4j](https://stellargraph.readthedocs.io/en/stable/demos/connector/neo4j/undirected-graphsage-on-cora-neo4j-example.html) | [source](undirected-graphsage-on-cora-neo4j-example.ipynb) | +| [Directed GraphSAGE with Neo4j, on Cora](https://stellargraph.readthedocs.io/en/stable/demos/connector/neo4j/directed-graphsage-on-cora-neo4j-example.html) | [source](directed-graphsage-on-cora-neo4j-example.ipynb) | +| [Loading Cora dataset into Neo4J database](https://stellargraph.readthedocs.io/en/stable/demos/connector/neo4j/load-cora-into-neo4j.html) | [source](load-cora-into-neo4j.ipynb) | +| [GraphSAGE with Neo4j, on Cora](https://stellargraph.readthedocs.io/en/stable/demos/connector/neo4j/undirected-graphsage-on-cora-neo4j-example.html) | [source](undirected-graphsage-on-cora-neo4j-example.ipynb) | The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). diff --git a/demos/embeddings/README.md b/demos/embeddings/README.md index c51e9267e..7a591b284 100644 --- a/demos/embeddings/README.md +++ b/demos/embeddings/README.md @@ -7,12 +7,12 @@ These demos are displayed with detailed descriptions in the documentation: https | Demo | Source | |---|---| -| [GCN Deep Graph Infomax on CORA](https://stellargraph.readthedocs.io/en/stable/demos/embeddings/deep-graph-infomax-cora.html) | [source](deep-graph-infomax-cora.ipynb) | -| [Graph representation learning through Unsupervised GraphSAGE](https://stellargraph.readthedocs.io/en/stable/demos/embeddings/embeddings-unsupervised-graphsage-cora.html) | [source](embeddings-unsupervised-graphsage-cora.ipynb) | -| [GraphWave aglorithm on a barbell graph](https://stellargraph.readthedocs.io/en/stable/demos/embeddings/graphwave-barbell.html) | [source](graphwave-barbell.ipynb) | -| [Node Representation Learning with attri2vec on Citeseer](https://stellargraph.readthedocs.io/en/stable/demos/embeddings/stellargraph-attri2vec-citeseer.html) | [source](stellargraph-attri2vec-citeseer.ipynb) | -| [Node representation learning with Metapath2Vec on BlogCatalog3](https://stellargraph.readthedocs.io/en/stable/demos/embeddings/stellargraph-metapath2vec.html) | [source](stellargraph-metapath2vec.ipynb) | -| [Node representation learning with Node2Vec on Cora](https://stellargraph.readthedocs.io/en/stable/demos/embeddings/stellargraph-node2vec.html) | [source](stellargraph-node2vec.ipynb) | +| [Node representation learning with Deep Graph Infomax](https://stellargraph.readthedocs.io/en/stable/demos/embeddings/deep-graph-infomax-cora.html) | [source](deep-graph-infomax-cora.ipynb) | +| [Node representation learning with GraphSAGE and UnsupervisedSampler](https://stellargraph.readthedocs.io/en/stable/demos/embeddings/embeddings-unsupervised-graphsage-cora.html) | [source](embeddings-unsupervised-graphsage-cora.ipynb) | +| [Node representations with GraphWave](https://stellargraph.readthedocs.io/en/stable/demos/embeddings/graphwave-barbell.html) | [source](graphwave-barbell.ipynb) | +| [Node representation learning with attri2vec](https://stellargraph.readthedocs.io/en/stable/demos/embeddings/stellargraph-attri2vec-citeseer.html) | [source](stellargraph-attri2vec-citeseer.ipynb) | +| [Node representation learning with Metapath2Vec](https://stellargraph.readthedocs.io/en/stable/demos/embeddings/stellargraph-metapath2vec.html) | [source](stellargraph-metapath2vec.ipynb) | +| [Node representation learning with Node2Vec](https://stellargraph.readthedocs.io/en/stable/demos/embeddings/stellargraph-node2vec.html) | [source](stellargraph-node2vec.ipynb) | | [Node representation learning with Watch Your Step on Cora](https://stellargraph.readthedocs.io/en/stable/demos/embeddings/watch-your-step-cora-demo.html) | [source](watch-your-step-cora-demo.ipynb) | The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). diff --git a/demos/ensembles/README.md b/demos/ensembles/README.md index 3570127bf..e262fd06f 100644 --- a/demos/ensembles/README.md +++ b/demos/ensembles/README.md @@ -7,8 +7,8 @@ These demos are displayed with detailed descriptions in the documentation: https | Demo | Source | |---|---| -| [StellarGraph Ensemble for link prediction](https://stellargraph.readthedocs.io/en/stable/demos/ensembles/ensemble-link-prediction-example.html) | [source](ensemble-link-prediction-example.ipynb) | -| [Stellargraph Ensembles for node attribute inference](https://stellargraph.readthedocs.io/en/stable/demos/ensembles/ensemble-node-classification-example.html) | [source](ensemble-node-classification-example.ipynb) | +| [Ensemble models for link prediction](https://stellargraph.readthedocs.io/en/stable/demos/ensembles/ensemble-link-prediction-example.html) | [source](ensemble-link-prediction-example.ipynb) | +| [Ensemble models for node classification](https://stellargraph.readthedocs.io/en/stable/demos/ensembles/ensemble-node-classification-example.html) | [source](ensemble-node-classification-example.ipynb) | The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). diff --git a/demos/graph-classification/README.md b/demos/graph-classification/README.md index ff04d78b1..796ccf0fa 100644 --- a/demos/graph-classification/README.md +++ b/demos/graph-classification/README.md @@ -7,8 +7,8 @@ These demos are displayed with detailed descriptions in the documentation: https | Demo | Source | |---|---| -| [Supervised graph classification with Deep Graph Convolutional Neural Networks](https://stellargraph.readthedocs.io/en/stable/demos/graph-classification/dgcnn-graph-classification.html) | [source](dgcnn-graph-classification.ipynb) | -| [Supervised graph classification example](https://stellargraph.readthedocs.io/en/stable/demos/graph-classification/supervised-graph-classification.html) | [source](supervised-graph-classification.ipynb) | +| [Supervised graph classification with Deep Graph CNN](https://stellargraph.readthedocs.io/en/stable/demos/graph-classification/dgcnn-graph-classification.html) | [source](dgcnn-graph-classification.ipynb) | +| [Supervised graph classification with GCN](https://stellargraph.readthedocs.io/en/stable/demos/graph-classification/supervised-graph-classification.html) | [source](supervised-graph-classification.ipynb) | The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). diff --git a/demos/interpretability/README.md b/demos/interpretability/README.md index fc226af9b..6f2f0f0d6 100644 --- a/demos/interpretability/README.md +++ b/demos/interpretability/README.md @@ -7,10 +7,10 @@ These demos are displayed with detailed descriptions in the documentation: https | Demo | Source | |---|---| -| [Interpreting Nodes and Edges by Saliency Maps in GAT](https://stellargraph.readthedocs.io/en/stable/demos/interpretability/gat/node-link-importance-demo-gat.html) | [source](gat/node-link-importance-demo-gat.ipynb) | +| [Interpreting nodes and edges with saliency maps in GAT](https://stellargraph.readthedocs.io/en/stable/demos/interpretability/gat/node-link-importance-demo-gat.html) | [source](gat/node-link-importance-demo-gat.ipynb) | | [Intepretability on Hateful Twitter Datasets](https://stellargraph.readthedocs.io/en/stable/demos/interpretability/gcn/hateful-twitters-interpretability.html) | [source](gcn/hateful-twitters-interpretability.ipynb) | -| [Interpreting Nodes and Edges by Saliency Maps in GCN (sparse)](https://stellargraph.readthedocs.io/en/stable/demos/interpretability/gcn/node-link-importance-demo-gcn-sparse.html) | [source](gcn/node-link-importance-demo-gcn-sparse.ipynb) | -| [Interpreting Nodes and Edges by Saliency Maps in GCN](https://stellargraph.readthedocs.io/en/stable/demos/interpretability/gcn/node-link-importance-demo-gcn.html) | [source](gcn/node-link-importance-demo-gcn.ipynb) | +| [Interpreting nodes and edges with saliency maps in GCN (sparse)](https://stellargraph.readthedocs.io/en/stable/demos/interpretability/gcn/node-link-importance-demo-gcn-sparse.html) | [source](gcn/node-link-importance-demo-gcn-sparse.ipynb) | +| [Interpreting nodes and edges with saliency maps in GCN](https://stellargraph.readthedocs.io/en/stable/demos/interpretability/gcn/node-link-importance-demo-gcn.html) | [source](gcn/node-link-importance-demo-gcn.ipynb) | The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). diff --git a/demos/link-prediction/README.md b/demos/link-prediction/README.md index 79d423df6..915c19e16 100644 --- a/demos/link-prediction/README.md +++ b/demos/link-prediction/README.md @@ -7,14 +7,14 @@ These demos are displayed with detailed descriptions in the documentation: https | Demo | Source | |---|---| -| [Inductive Node Representation Learning through attri2vec](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/attri2vec/stellargraph-attri2vec-DBLP.html) | [source](attri2vec/stellargraph-attri2vec-DBLP.ipynb) | -| [Link prediction example: GCN on the Cora citation dataset](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/gcn/cora-gcn-links-example.html) | [source](gcn/cora-gcn-links-example.ipynb) | -| [Link prediction example: GraphSAGE on the Cora citation dataset](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/graphsage/cora-links-example.html) | [source](graphsage/cora-links-example.ipynb) | -| [Stellargraph example: Heterogeneous GraphSAGE on the Movielens recommendation dataset](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/hinsage/movielens-recommender.html) | [source](hinsage/movielens-recommender.ipynb) | -| [ComplEx on WN18 and FB15K](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/knowledge-graphs/complex.html) | [source](knowledge-graphs/complex.ipynb) | -| [DistMult on WN18 and FB15K](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/knowledge-graphs/distmult.html) | [source](knowledge-graphs/distmult.ipynb) | -| [Link prediction with Node2Vec on Cora](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/random-walks/cora-lp-demo.html) | [source](random-walks/cora-lp-demo.ipynb) | -| [Continuous-Time Dynamic Network Embeddings](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/random-walks/ctdne-link-prediction.html) | [source](random-walks/ctdne-link-prediction.ipynb) | +| [Link prediction via inductive node representations with attri2vec](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/attri2vec/stellargraph-attri2vec-DBLP.html) | [source](attri2vec/stellargraph-attri2vec-DBLP.ipynb) | +| [Link prediction with GCN](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/gcn/cora-gcn-links-example.html) | [source](gcn/cora-gcn-links-example.ipynb) | +| [Link prediction with GraphSAGE](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/graphsage/cora-links-example.html) | [source](graphsage/cora-links-example.ipynb) | +| [Link prediction with Heterogeneous GraphSAGE (HinSAGE)](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/hinsage/movielens-recommender.html) | [source](hinsage/movielens-recommender.ipynb) | +| [Knowledge graph link prediction with ComplEx](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/knowledge-graphs/complex.html) | [source](knowledge-graphs/complex.ipynb) | +| [Knowledge graph link prediction with DistMult](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/knowledge-graphs/distmult.html) | [source](knowledge-graphs/distmult.ipynb) | +| [Link prediction with Node2Vec](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/random-walks/cora-lp-demo.html) | [source](random-walks/cora-lp-demo.ipynb) | +| [Link prediction with Continuous-Time Dynamic Network Embeddings (CTDNE)](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/random-walks/ctdne-link-prediction.html) | [source](random-walks/ctdne-link-prediction.ipynb) | The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). diff --git a/demos/link-prediction/attri2vec/README.md b/demos/link-prediction/attri2vec/README.md index fee3e3c4c..48426a0b6 100644 --- a/demos/link-prediction/attri2vec/README.md +++ b/demos/link-prediction/attri2vec/README.md @@ -7,7 +7,7 @@ These demos are displayed with detailed descriptions in the documentation: https | Demo | Source | |---|---| -| [Inductive Node Representation Learning through attri2vec](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/attri2vec/stellargraph-attri2vec-DBLP.html) | [source](stellargraph-attri2vec-DBLP.ipynb) | +| [Link prediction via inductive node representations with attri2vec](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/attri2vec/stellargraph-attri2vec-DBLP.html) | [source](stellargraph-attri2vec-DBLP.ipynb) | The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). diff --git a/demos/link-prediction/graphsage/README.md b/demos/link-prediction/graphsage/README.md index 1a95858ca..b0080667d 100644 --- a/demos/link-prediction/graphsage/README.md +++ b/demos/link-prediction/graphsage/README.md @@ -7,7 +7,7 @@ These demos are displayed with detailed descriptions in the documentation: https | Demo | Source | |---|---| -| [Link prediction example: GraphSAGE on the Cora citation dataset](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/graphsage/cora-links-example.html) | [source](cora-links-example.ipynb) | +| [Link prediction with GraphSAGE](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/graphsage/cora-links-example.html) | [source](cora-links-example.ipynb) | The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). diff --git a/demos/link-prediction/hinsage/README.md b/demos/link-prediction/hinsage/README.md index 590b88c67..c4b3eb013 100644 --- a/demos/link-prediction/hinsage/README.md +++ b/demos/link-prediction/hinsage/README.md @@ -7,7 +7,7 @@ These demos are displayed with detailed descriptions in the documentation: https | Demo | Source | |---|---| -| [Stellargraph example: Heterogeneous GraphSAGE on the Movielens recommendation dataset](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/hinsage/movielens-recommender.html) | [source](movielens-recommender.ipynb) | +| [Link prediction with Heterogeneous GraphSAGE (HinSAGE)](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/hinsage/movielens-recommender.html) | [source](movielens-recommender.ipynb) | The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). diff --git a/demos/node-classification/README.md b/demos/node-classification/README.md index bd68dc2f6..0577d1ab2 100644 --- a/demos/node-classification/README.md +++ b/demos/node-classification/README.md @@ -7,18 +7,18 @@ These demos are displayed with detailed descriptions in the documentation: https | Demo | Source | |---|---| -| [Node Representation Learning with attri2vec on Citeseer](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/attri2vec/attri2vec-citeseer-node-classification-example.html) | [source](attri2vec/attri2vec-citeseer-node-classification-example.ipynb) | -| [Cluster-GCN for node classification](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/cluster-gcn/cluster-gcn-node-classification.html) | [source](cluster-gcn/cluster-gcn-node-classification.ipynb) | -| [Stellargraph example: Graph Attention Network (GAT) on the CORA citation dataset](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/gat/gat-cora-node-classification-example.html) | [source](gat/gat-cora-node-classification-example.ipynb) | -| [Graph Convolutional Network (GCN) on the CORA citation dataset](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/gcn/gcn-cora-node-classification-example.html) | [source](gcn/gcn-cora-node-classification-example.ipynb) | -| [Stellargraph example: Fully directed GraphSAGE on a directed CORA citation network](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/graphsage/directed-graphsage-on-cora-example.html) | [source](graphsage/directed-graphsage-on-cora-example.ipynb) | -| [Stellargraph example: GraphSAGE on the CORA citation network](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/graphsage/graphsage-cora-node-classification-example.html) | [source](graphsage/graphsage-cora-node-classification-example.ipynb) | -| [Inductive representation learning using GraphSAGE on the Pubmed-Diabetes citation network ](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/graphsage/graphsage-pubmed-inductive-node-classification-example.html) | [source](graphsage/graphsage-pubmed-inductive-node-classification-example.ipynb) | -| [Node classification with Node2Vec on Cora](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/node2vec/stellargraph-node2vec-node-classification.html) | [source](node2vec/stellargraph-node2vec-node-classification.ipynb) | -| [Node2Vec with weighted random walks](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/node2vec/stellargraph-node2vec-weighted-random-walks.html) | [source](node2vec/stellargraph-node2vec-weighted-random-walks.ipynb) | -| [Stellargraph example: Personalised Propagation of Neural Predictions (PPNP) and Approximate PPNP (APPNP) on the CORA citation dataset](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/ppnp/ppnp-cora-node-classification-example.html) | [source](ppnp/ppnp-cora-node-classification-example.ipynb) | -| [Stellargraph example: Relational Graph Convolutional Network (RGCN) on the AIFB relational dataset](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/rgcn/rgcn-aifb-node-classification-example.html) | [source](rgcn/rgcn-aifb-node-classification-example.ipynb) | -| [Stellargraph example: Simplified Graph Convolutions (SGC) on the CORA citation dataset](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/sgc/sgc-node-classification-example.html) | [source](sgc/sgc-node-classification-example.ipynb) | +| [Node classification via node representations with attri2vec](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/attri2vec/attri2vec-citeseer-node-classification-example.html) | [source](attri2vec/attri2vec-citeseer-node-classification-example.ipynb) | +| [Node classification with Cluster-GCN](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/cluster-gcn/cluster-gcn-node-classification.html) | [source](cluster-gcn/cluster-gcn-node-classification.ipynb) | +| [Node classification with Graph ATtention Network (GAT)](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/gat/gat-cora-node-classification-example.html) | [source](gat/gat-cora-node-classification-example.ipynb) | +| [Node classification with Graph Convolutional Network (GCN)](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/gcn/gcn-cora-node-classification-example.html) | [source](gcn/gcn-cora-node-classification-example.ipynb) | +| [Node classification with directed GraphSAGE](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/graphsage/directed-graphsage-on-cora-example.html) | [source](graphsage/directed-graphsage-on-cora-example.ipynb) | +| [Node classification with GraphSAGE](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/graphsage/graphsage-cora-node-classification-example.html) | [source](graphsage/graphsage-cora-node-classification-example.ipynb) | +| [Inductive node classification and representation learning using GraphSAGE](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/graphsage/graphsage-pubmed-inductive-node-classification-example.html) | [source](graphsage/graphsage-pubmed-inductive-node-classification-example.ipynb) | +| [Node classification with Node2Vec](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/node2vec/stellargraph-node2vec-node-classification.html) | [source](node2vec/stellargraph-node2vec-node-classification.ipynb) | +| [Node classification with weighted Node2Vec](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/node2vec/stellargraph-node2vec-weighted-random-walks.html) | [source](node2vec/stellargraph-node2vec-weighted-random-walks.ipynb) | +| [Node classification with Personalised Propagation of Neural Predictions (PPNP) and Approximate PPNP (APPNP)](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/ppnp/ppnp-cora-node-classification-example.html) | [source](ppnp/ppnp-cora-node-classification-example.ipynb) | +| [Node classification with Relational Graph Convolutional Network (RGCN)](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/rgcn/rgcn-aifb-node-classification-example.html) | [source](rgcn/rgcn-aifb-node-classification-example.ipynb) | +| [Node classification with Simplified Graph Convolutions (SGC)](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/sgc/sgc-node-classification-example.html) | [source](sgc/sgc-node-classification-example.ipynb) | The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). diff --git a/demos/node-classification/attri2vec/README.md b/demos/node-classification/attri2vec/README.md index 11a6cdf10..442017a5c 100644 --- a/demos/node-classification/attri2vec/README.md +++ b/demos/node-classification/attri2vec/README.md @@ -7,7 +7,7 @@ These demos are displayed with detailed descriptions in the documentation: https | Demo | Source | |---|---| -| [Node Representation Learning with attri2vec on Citeseer](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/attri2vec/attri2vec-citeseer-node-classification-example.html) | [source](attri2vec-citeseer-node-classification-example.ipynb) | +| [Node classification via node representations with attri2vec](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/attri2vec/attri2vec-citeseer-node-classification-example.html) | [source](attri2vec-citeseer-node-classification-example.ipynb) | The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). diff --git a/demos/node-classification/gat/README.md b/demos/node-classification/gat/README.md index 2fb707c62..441ce44c9 100644 --- a/demos/node-classification/gat/README.md +++ b/demos/node-classification/gat/README.md @@ -7,7 +7,7 @@ These demos are displayed with detailed descriptions in the documentation: https | Demo | Source | |---|---| -| [Stellargraph example: Graph Attention Network (GAT) on the CORA citation dataset](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/gat/gat-cora-node-classification-example.html) | [source](gat-cora-node-classification-example.ipynb) | +| [Node classification with Graph ATtention Network (GAT)](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/gat/gat-cora-node-classification-example.html) | [source](gat-cora-node-classification-example.ipynb) | The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). diff --git a/demos/node-classification/gcn/README.md b/demos/node-classification/gcn/README.md index 4bba8f18f..1190153b0 100644 --- a/demos/node-classification/gcn/README.md +++ b/demos/node-classification/gcn/README.md @@ -7,7 +7,7 @@ These demos are displayed with detailed descriptions in the documentation: https | Demo | Source | |---|---| -| [Graph Convolutional Network (GCN) on the CORA citation dataset](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/gcn/gcn-cora-node-classification-example.html) | [source](gcn-cora-node-classification-example.ipynb) | +| [Node classification with Graph Convolutional Network (GCN)](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/gcn/gcn-cora-node-classification-example.html) | [source](gcn-cora-node-classification-example.ipynb) | The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). diff --git a/demos/node-classification/graphsage/README.md b/demos/node-classification/graphsage/README.md index 9e76bf1f9..952116636 100644 --- a/demos/node-classification/graphsage/README.md +++ b/demos/node-classification/graphsage/README.md @@ -7,9 +7,9 @@ These demos are displayed with detailed descriptions in the documentation: https | Demo | Source | |---|---| -| [Stellargraph example: Fully directed GraphSAGE on a directed CORA citation network](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/graphsage/directed-graphsage-on-cora-example.html) | [source](directed-graphsage-on-cora-example.ipynb) | -| [Stellargraph example: GraphSAGE on the CORA citation network](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/graphsage/graphsage-cora-node-classification-example.html) | [source](graphsage-cora-node-classification-example.ipynb) | -| [Inductive representation learning using GraphSAGE on the Pubmed-Diabetes citation network ](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/graphsage/graphsage-pubmed-inductive-node-classification-example.html) | [source](graphsage-pubmed-inductive-node-classification-example.ipynb) | +| [Node classification with directed GraphSAGE](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/graphsage/directed-graphsage-on-cora-example.html) | [source](directed-graphsage-on-cora-example.ipynb) | +| [Node classification with GraphSAGE](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/graphsage/graphsage-cora-node-classification-example.html) | [source](graphsage-cora-node-classification-example.ipynb) | +| [Inductive node classification and representation learning using GraphSAGE](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/graphsage/graphsage-pubmed-inductive-node-classification-example.html) | [source](graphsage-pubmed-inductive-node-classification-example.ipynb) | The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). diff --git a/demos/node-classification/node2vec/README.md b/demos/node-classification/node2vec/README.md index c8b3133ef..1528ac4b1 100644 --- a/demos/node-classification/node2vec/README.md +++ b/demos/node-classification/node2vec/README.md @@ -7,8 +7,8 @@ These demos are displayed with detailed descriptions in the documentation: https | Demo | Source | |---|---| -| [Node classification with Node2Vec on Cora](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/node2vec/stellargraph-node2vec-node-classification.html) | [source](stellargraph-node2vec-node-classification.ipynb) | -| [Node2Vec with weighted random walks](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/node2vec/stellargraph-node2vec-weighted-random-walks.html) | [source](stellargraph-node2vec-weighted-random-walks.ipynb) | +| [Node classification with Node2Vec](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/node2vec/stellargraph-node2vec-node-classification.html) | [source](stellargraph-node2vec-node-classification.ipynb) | +| [Node classification with weighted Node2Vec](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/node2vec/stellargraph-node2vec-weighted-random-walks.html) | [source](stellargraph-node2vec-weighted-random-walks.ipynb) | The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). diff --git a/demos/node-classification/ppnp/README.md b/demos/node-classification/ppnp/README.md index 50310f74c..93bce13e6 100644 --- a/demos/node-classification/ppnp/README.md +++ b/demos/node-classification/ppnp/README.md @@ -7,7 +7,7 @@ These demos are displayed with detailed descriptions in the documentation: https | Demo | Source | |---|---| -| [Stellargraph example: Personalised Propagation of Neural Predictions (PPNP) and Approximate PPNP (APPNP) on the CORA citation dataset](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/ppnp/ppnp-cora-node-classification-example.html) | [source](ppnp-cora-node-classification-example.ipynb) | +| [Node classification with Personalised Propagation of Neural Predictions (PPNP) and Approximate PPNP (APPNP)](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/ppnp/ppnp-cora-node-classification-example.html) | [source](ppnp-cora-node-classification-example.ipynb) | The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). From e5118f88363fadba7f84978216319c87df31985b Mon Sep 17 00:00:00 2001 From: Huon Wilson Date: Tue, 5 May 2020 09:20:09 +1000 Subject: [PATCH 31/43] Apply suggestions from code review Co-authored-by: Tim Pitman <4321744+timpitman@users.noreply.github.com> --- .../neo4j/directed-graphsage-on-cora-neo4j-example.ipynb | 2 +- .../neo4j/undirected-graphsage-on-cora-neo4j-example.ipynb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/demos/connector/neo4j/directed-graphsage-on-cora-neo4j-example.ipynb b/demos/connector/neo4j/directed-graphsage-on-cora-neo4j-example.ipynb index 9ed236ec3..379049c3f 100644 --- a/demos/connector/neo4j/directed-graphsage-on-cora-neo4j-example.ipynb +++ b/demos/connector/neo4j/directed-graphsage-on-cora-neo4j-example.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Directed GraphSAGE with Neo4j, on Cora\n" + "# Directed GraphSAGE with Neo4J, on Cora\n" ] }, { diff --git a/demos/connector/neo4j/undirected-graphsage-on-cora-neo4j-example.ipynb b/demos/connector/neo4j/undirected-graphsage-on-cora-neo4j-example.ipynb index e8ff29238..3784b25d4 100644 --- a/demos/connector/neo4j/undirected-graphsage-on-cora-neo4j-example.ipynb +++ b/demos/connector/neo4j/undirected-graphsage-on-cora-neo4j-example.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# GraphSAGE with Neo4j, on Cora" + "# GraphSAGE with Neo4J, on Cora" ] }, { From 2f05dfa5f2a96ceb8d66e212815773df28efb491 Mon Sep 17 00:00:00 2001 From: Huon Wilson Date: Tue, 5 May 2020 09:25:21 +1000 Subject: [PATCH 32/43] Adjust and regenerate README --- demos/node-classification/README.md | 1 + .../gcn/gcn-cora-node-classification-example.ipynb | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/demos/node-classification/README.md b/demos/node-classification/README.md index 7ff65a160..fde67d359 100644 --- a/demos/node-classification/README.md +++ b/demos/node-classification/README.md @@ -12,6 +12,7 @@ These demos are displayed with detailed descriptions in the documentation: https | [Node classification with directed GraphSAGE](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/directed-graphsage-node-classification.html) | [source](directed-graphsage-node-classification.ipynb) | | [Node classification with Graph ATtention Network (GAT)](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/gat-node-classification.html) | [source](gat-node-classification.ipynb) | | [Node classification with Graph Convolutional Network (GCN)](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/gcn-node-classification.html) | [source](gcn-node-classification.ipynb) | +| [(Moved) Node classification with Graph Convolutional Network (GCN)](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/gcn/gcn-cora-node-classification-example.html) | [source](gcn/gcn-cora-node-classification-example.ipynb) | | [Inductive node classification and representation learning using GraphSAGE](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/graphsage-inductive-node-classification.html) | [source](graphsage-inductive-node-classification.ipynb) | | [Node classification with GraphSAGE](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/graphsage-node-classification.html) | [source](graphsage-node-classification.ipynb) | | [Node classification with Node2Vec](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/node2vec-node-classification.html) | [source](node2vec-node-classification.ipynb) | diff --git a/demos/node-classification/gcn/gcn-cora-node-classification-example.ipynb b/demos/node-classification/gcn/gcn-cora-node-classification-example.ipynb index 824aff7de..f753d587a 100644 --- a/demos/node-classification/gcn/gcn-cora-node-classification-example.ipynb +++ b/demos/node-classification/gcn/gcn-cora-node-classification-example.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Node classification with Graph Convolutional Network (GCN)" + "# (Moved) Node classification with Graph Convolutional Network (GCN)" ] }, { From 1c5335bf8acc6a2acff4c3b66fede78ab8be72e3 Mon Sep 17 00:00:00 2001 From: Huon Wilson Date: Tue, 5 May 2020 09:30:51 +1000 Subject: [PATCH 33/43] Community detection and hateful twitter --- demos/community_detection/README.md | 2 +- demos/use-cases/hateful-twitters.ipynb | 2 +- docs/demos/community_detection/index.txt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/demos/community_detection/README.md b/demos/community_detection/README.md index 9cb33c38e..6cb9b24a3 100644 --- a/demos/community_detection/README.md +++ b/demos/community_detection/README.md @@ -1,4 +1,4 @@ -# Community detection on a terrorist attack data +# Community detection diff --git a/demos/use-cases/hateful-twitters.ipynb b/demos/use-cases/hateful-twitters.ipynb index 1d699c000..72a644771 100644 --- a/demos/use-cases/hateful-twitters.ipynb +++ b/demos/use-cases/hateful-twitters.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Detection of Twitter users who use hateful lexicon using graph machine learning with Stellargraph\n" + "# Detection of Twitter users who use hateful lexicon with graph machine learning\n" ] }, { diff --git a/docs/demos/community_detection/index.txt b/docs/demos/community_detection/index.txt index 7818f6b63..f1ecdaba1 100644 --- a/docs/demos/community_detection/index.txt +++ b/docs/demos/community_detection/index.txt @@ -1,4 +1,4 @@ -Community detection on a terrorist attack data +Community detection ============================================== This is an example of using Unsupervised GraphSAGE embeddings with clustering to demonstrate how to solve community detection problem. The demo guides through the steps and shows the differences between "traditional" community detection (infomap) and the clustering-of-embeddings approach. From 498e42abe4b3759c75e339341d161610084c004d Mon Sep 17 00:00:00 2001 From: Huon Wilson Date: Tue, 5 May 2020 09:38:42 +1000 Subject: [PATCH 34/43] Regenerate --- demos/connector/neo4j/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/demos/connector/neo4j/README.md b/demos/connector/neo4j/README.md index b72090859..bbdca6190 100644 --- a/demos/connector/neo4j/README.md +++ b/demos/connector/neo4j/README.md @@ -7,9 +7,9 @@ These demos are displayed with detailed descriptions in the documentation: https | Demo | Source | |---|---| -| [Directed GraphSAGE with Neo4j, on Cora](https://stellargraph.readthedocs.io/en/stable/demos/connector/neo4j/directed-graphsage-on-cora-neo4j-example.html) | [source](directed-graphsage-on-cora-neo4j-example.ipynb) | +| [Directed GraphSAGE with Neo4J, on Cora](https://stellargraph.readthedocs.io/en/stable/demos/connector/neo4j/directed-graphsage-on-cora-neo4j-example.html) | [source](directed-graphsage-on-cora-neo4j-example.ipynb) | | [Loading Cora dataset into Neo4J database](https://stellargraph.readthedocs.io/en/stable/demos/connector/neo4j/load-cora-into-neo4j.html) | [source](load-cora-into-neo4j.ipynb) | -| [GraphSAGE with Neo4j, on Cora](https://stellargraph.readthedocs.io/en/stable/demos/connector/neo4j/undirected-graphsage-on-cora-neo4j-example.html) | [source](undirected-graphsage-on-cora-neo4j-example.ipynb) | +| [GraphSAGE with Neo4J, on Cora](https://stellargraph.readthedocs.io/en/stable/demos/connector/neo4j/undirected-graphsage-on-cora-neo4j-example.html) | [source](undirected-graphsage-on-cora-neo4j-example.ipynb) | The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). From aba64b26535ce394ce8e118b6596b83af3e75079 Mon Sep 17 00:00:00 2001 From: Huon Wilson Date: Tue, 5 May 2020 10:52:35 +1000 Subject: [PATCH 35/43] Revert Neo4j -> Neo4J, remove more datasets --- .../neo4j/directed-graphsage-on-cora-neo4j-example.ipynb | 2 +- .../neo4j/undirected-graphsage-on-cora-neo4j-example.ipynb | 2 +- demos/embeddings/watch-your-step-cora-demo.ipynb | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/demos/connector/neo4j/directed-graphsage-on-cora-neo4j-example.ipynb b/demos/connector/neo4j/directed-graphsage-on-cora-neo4j-example.ipynb index 379049c3f..77f3ca107 100644 --- a/demos/connector/neo4j/directed-graphsage-on-cora-neo4j-example.ipynb +++ b/demos/connector/neo4j/directed-graphsage-on-cora-neo4j-example.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Directed GraphSAGE with Neo4J, on Cora\n" + "# Directed GraphSAGE with Neo4j\n" ] }, { diff --git a/demos/connector/neo4j/undirected-graphsage-on-cora-neo4j-example.ipynb b/demos/connector/neo4j/undirected-graphsage-on-cora-neo4j-example.ipynb index 3784b25d4..73c648314 100644 --- a/demos/connector/neo4j/undirected-graphsage-on-cora-neo4j-example.ipynb +++ b/demos/connector/neo4j/undirected-graphsage-on-cora-neo4j-example.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# GraphSAGE with Neo4J, on Cora" + "# GraphSAGE with Neo4j" ] }, { diff --git a/demos/embeddings/watch-your-step-cora-demo.ipynb b/demos/embeddings/watch-your-step-cora-demo.ipynb index d6789fa89..8608f00c1 100644 --- a/demos/embeddings/watch-your-step-cora-demo.ipynb +++ b/demos/embeddings/watch-your-step-cora-demo.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Node representation learning with Watch Your Step on Cora" + "# Node representation learning with Watch Your Step" ] }, { From b37122d21019dc6e053c7888425d59c844aedfcf Mon Sep 17 00:00:00 2001 From: Huon Wilson Date: Tue, 5 May 2020 11:07:44 +1000 Subject: [PATCH 36/43] Remove citation from title --- demos/node-classification/attri2vec/README.md | 2 +- docs/demos/node-classification/attri2vec/index.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/demos/node-classification/attri2vec/README.md b/demos/node-classification/attri2vec/README.md index 442017a5c..8248dac51 100644 --- a/demos/node-classification/attri2vec/README.md +++ b/demos/node-classification/attri2vec/README.md @@ -1,4 +1,4 @@ -## Node classification using attri2vec [1] +## Node classification using attri2vec diff --git a/docs/demos/node-classification/attri2vec/index.txt b/docs/demos/node-classification/attri2vec/index.txt index 6be7dca8b..fb45cac58 100644 --- a/docs/demos/node-classification/attri2vec/index.txt +++ b/docs/demos/node-classification/attri2vec/index.txt @@ -1,4 +1,4 @@ -Node classification using attri2vec [1] +Node classification using attri2vec ======================================= This folder contains a `Jupyter `_ python notebook demonstrating the combined use of From 017b4088275296110b322f8519e262362ba4d160 Mon Sep 17 00:00:00 2001 From: Huon Wilson Date: Tue, 5 May 2020 11:09:02 +1000 Subject: [PATCH 37/43] Remove more citations from title --- demos/node-classification/node2vec/README.md | 2 +- docs/demos/node-classification/node2vec/index.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/demos/node-classification/node2vec/README.md b/demos/node-classification/node2vec/README.md index 1528ac4b1..d1deedc79 100644 --- a/demos/node-classification/node2vec/README.md +++ b/demos/node-classification/node2vec/README.md @@ -1,4 +1,4 @@ -## Node classification using Node2Vec [1] +## Node classification using Node2Vec diff --git a/docs/demos/node-classification/node2vec/index.txt b/docs/demos/node-classification/node2vec/index.txt index 8790deac9..c10eb3182 100644 --- a/docs/demos/node-classification/node2vec/index.txt +++ b/docs/demos/node-classification/node2vec/index.txt @@ -1,4 +1,4 @@ -Node classification using Node2Vec [1] +Node classification using Node2Vec ====================================== This folder contains two `Jupyter `_ python notebooks demonstrating the combined use of From e9f392e58290451aa7430295cc06a0b4ff066c09 Mon Sep 17 00:00:00 2001 From: Huon Wilson Date: Tue, 5 May 2020 11:47:44 +1000 Subject: [PATCH 38/43] Regenerate --- demos/connector/neo4j/README.md | 4 ++-- demos/embeddings/README.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/demos/connector/neo4j/README.md b/demos/connector/neo4j/README.md index bbdca6190..f88f44e82 100644 --- a/demos/connector/neo4j/README.md +++ b/demos/connector/neo4j/README.md @@ -7,9 +7,9 @@ These demos are displayed with detailed descriptions in the documentation: https | Demo | Source | |---|---| -| [Directed GraphSAGE with Neo4J, on Cora](https://stellargraph.readthedocs.io/en/stable/demos/connector/neo4j/directed-graphsage-on-cora-neo4j-example.html) | [source](directed-graphsage-on-cora-neo4j-example.ipynb) | +| [Directed GraphSAGE with Neo4j](https://stellargraph.readthedocs.io/en/stable/demos/connector/neo4j/directed-graphsage-on-cora-neo4j-example.html) | [source](directed-graphsage-on-cora-neo4j-example.ipynb) | | [Loading Cora dataset into Neo4J database](https://stellargraph.readthedocs.io/en/stable/demos/connector/neo4j/load-cora-into-neo4j.html) | [source](load-cora-into-neo4j.ipynb) | -| [GraphSAGE with Neo4J, on Cora](https://stellargraph.readthedocs.io/en/stable/demos/connector/neo4j/undirected-graphsage-on-cora-neo4j-example.html) | [source](undirected-graphsage-on-cora-neo4j-example.ipynb) | +| [GraphSAGE with Neo4j](https://stellargraph.readthedocs.io/en/stable/demos/connector/neo4j/undirected-graphsage-on-cora-neo4j-example.html) | [source](undirected-graphsage-on-cora-neo4j-example.ipynb) | The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). diff --git a/demos/embeddings/README.md b/demos/embeddings/README.md index f1414e26f..18712dda2 100644 --- a/demos/embeddings/README.md +++ b/demos/embeddings/README.md @@ -13,7 +13,7 @@ These demos are displayed with detailed descriptions in the documentation: https | [Node representation learning with attri2vec](https://stellargraph.readthedocs.io/en/stable/demos/embeddings/stellargraph-attri2vec-citeseer.html) | [source](stellargraph-attri2vec-citeseer.ipynb) | | [Node representation learning with Metapath2Vec](https://stellargraph.readthedocs.io/en/stable/demos/embeddings/stellargraph-metapath2vec.html) | [source](stellargraph-metapath2vec.ipynb) | | [Node representation learning with Node2Vec](https://stellargraph.readthedocs.io/en/stable/demos/embeddings/stellargraph-node2vec.html) | [source](stellargraph-node2vec.ipynb) | -| [Node representation learning with Watch Your Step on Cora](https://stellargraph.readthedocs.io/en/stable/demos/embeddings/watch-your-step-cora-demo.html) | [source](watch-your-step-cora-demo.ipynb) | +| [Node representation learning with Watch Your Step](https://stellargraph.readthedocs.io/en/stable/demos/embeddings/watch-your-step-cora-demo.html) | [source](watch-your-step-cora-demo.ipynb) | The demo titles link to the latest, nicely rendered version. The 'source' links will open the demo in the application in which this README is being viewed, such as Jupyter Lab (ready for execution). From a2f4f36779b4cc76cd936b26734118a80bbdc4c4 Mon Sep 17 00:00:00 2001 From: Huon Wilson Date: Tue, 5 May 2020 12:59:07 +1000 Subject: [PATCH 39/43] Fix more broken links --- demos/community_detection/attacks_clustering_analysis.ipynb | 4 ++-- .../neo4j/directed-graphsage-on-cora-neo4j-example.ipynb | 2 +- .../neo4j/undirected-graphsage-on-cora-neo4j-example.ipynb | 2 +- .../graphsage-unsupervised-sampler-embeddings.ipynb | 4 ++-- demos/embeddings/node2vec-embeddings.ipynb | 2 +- stellargraph/layer/cluster_gcn.py | 4 ++-- stellargraph/layer/gcn.py | 3 +-- stellargraph/layer/graph_attention.py | 3 +-- stellargraph/layer/graphsage.py | 4 ++-- stellargraph/layer/rgcn.py | 4 +--- 10 files changed, 14 insertions(+), 18 deletions(-) diff --git a/demos/community_detection/attacks_clustering_analysis.ipynb b/demos/community_detection/attacks_clustering_analysis.ipynb index 582eb9ea0..80a81546c 100644 --- a/demos/community_detection/attacks_clustering_analysis.ipynb +++ b/demos/community_detection/attacks_clustering_analysis.ipynb @@ -70,7 +70,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "For more detailed explanation of unsupervised graphSAGE see [Unsupervised graphSAGE demo](https://stellargraph.readthedocs.io/en/stable/demos/embeddings/embeddings-unsupervised-graphsage-cora.html)." + "For more detailed explanation of unsupervised graphSAGE see [Unsupervised graphSAGE demo](../embeddings/graphsage-unsupervised-sampler-embeddings.html)." ] }, { @@ -1339,7 +1339,7 @@ "source": [ "### Unsupervised graphSAGE\n", "\n", - "(For a detailed unsupervised GraphSAGE workflow with a narrative, see [Unsupervised graphSAGE demo](https://stellargraph.readthedocs.io/en/stable/demos/embeddings/embeddings-unsupervised-graphsage-cora.html))" + "(For a detailed unsupervised GraphSAGE workflow with a narrative, see [Unsupervised graphSAGE demo](.../embeddings/graphsage-unsupervised-sampler-embeddings.ipynb))" ] }, { diff --git a/demos/connector/neo4j/directed-graphsage-on-cora-neo4j-example.ipynb b/demos/connector/neo4j/directed-graphsage-on-cora-neo4j-example.ipynb index 77f3ca107..268eac632 100644 --- a/demos/connector/neo4j/directed-graphsage-on-cora-neo4j-example.ipynb +++ b/demos/connector/neo4j/directed-graphsage-on-cora-neo4j-example.ipynb @@ -946,7 +946,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Please refer to [directed-graphsage-on-cora-example.ipynb](./../../node-classification/graphsage/directed-graphsage-on-cora-example.ipynb) for **node embedding visualization**." + "Please refer to [directed-graphsage-node-classification.ipynb](./../../node-classification/directed-graphsage-node-classification.ipynb) for **node embedding visualization**." ] }, { diff --git a/demos/connector/neo4j/undirected-graphsage-on-cora-neo4j-example.ipynb b/demos/connector/neo4j/undirected-graphsage-on-cora-neo4j-example.ipynb index 73c648314..3cded880f 100644 --- a/demos/connector/neo4j/undirected-graphsage-on-cora-neo4j-example.ipynb +++ b/demos/connector/neo4j/undirected-graphsage-on-cora-neo4j-example.ipynb @@ -782,7 +782,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Please refer to [directed-graphsage-on-cora-example.ipynb](./../../node-classification/graphsage/graphsage-cora-node-classification-example.ipynb) for **node embedding visualization**." + "Please refer to [graphsage-node-classification.ipynb](./../../node-classification/graphsage-node-classification.ipynb) for **node embedding visualization**." ] }, { diff --git a/demos/embeddings/graphsage-unsupervised-sampler-embeddings.ipynb b/demos/embeddings/graphsage-unsupervised-sampler-embeddings.ipynb index 7b0048b44..5da8ea3a5 100644 --- a/demos/embeddings/graphsage-unsupervised-sampler-embeddings.ipynb +++ b/demos/embeddings/graphsage-unsupervised-sampler-embeddings.ipynb @@ -32,7 +32,7 @@ "\n", "A high-level explanation of the unsupervised GraphSAGE method of graph representation learning is as follows.\n", "\n", - "Objective: *Given a graph, learn embeddings of the nodes using only the graph structure and the node features, without using any known node class labels* (hence \"unsupervised\"; for semi-supervised learning of node embeddings, see this [demo](https://stellargraph.readthedocs.io/en/stable/demos/node-classification/graphsage/graphsage-cora-node-classification-example.html))\n", + "Objective: *Given a graph, learn embeddings of the nodes using only the graph structure and the node features, without using any known node class labels* (hence \"unsupervised\"; for semi-supervised learning of node embeddings, see this [demo](../node-classification/graphsage-node-classification.ipynb))\n", "\n", "**Unsupervised GraphSAGE model:** In the Unsupervised GraphSAGE model, node embeddings are learnt by solving a simple classification task: given a large set of \"positive\" `(target, context)` node pairs generated from random walks performed on the graph (i.e., node pairs that co-occur within a certain context window in random walks), and an equally large set of \"negative\" node pairs that are randomly selected from the graph according to a certain distribution, learn a binary classifier that predicts whether arbitrary node pairs are likely to co-occur in a random walk performed on the graph. Through learning this simple binary node-pair-classification task, the model automatically learns an inductive mapping from attributes of nodes and their neighbors to node embeddings in a high-dimensional vector space, which preserves structural and feature similarities of the nodes. Unlike embeddings obtained by algorithms such as [Node2Vec](https://snap.stanford.edu/node2vec), this mapping is inductive: given a new node (with attributes) and its links to other nodes in the graph (which was unseen during model training), we can evaluate its embeddings without having to re-train the model. \n", "\n", @@ -697,7 +697,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "The obtained accuracy is pretty decent, better than that obtained by using node embeddings obtained by `node2vec` that ignores node attributes, only taking into account the graph structure (see this [demo](https://stellargraph.readthedocs.io/en/stable/demos/embeddings/stellargraph-node2vec.html)). " + "The obtained accuracy is pretty decent, better than that obtained by using node embeddings obtained by `node2vec` that ignores node attributes, only taking into account the graph structure (see this [demo](node2vec-embeddings.ipynb)). " ] }, { diff --git a/demos/embeddings/node2vec-embeddings.ipynb b/demos/embeddings/node2vec-embeddings.ipynb index 7c3fe34ff..d88c293f3 100644 --- a/demos/embeddings/node2vec-embeddings.ipynb +++ b/demos/embeddings/node2vec-embeddings.ipynb @@ -349,7 +349,7 @@ "\n", "The node embeddings calculated using Word2Vec can be used as feature vectors in a downstream task such as node attribute inference (e.g., inferring the subject of a paper in Cora), community detection (clustering of nodes based on the similarity of their embedding vectors), and link prediction (e.g., prediction of citation links between papers).\n", "\n", - "For a more detailed example of using Node2Vec for link prediction see [this example](https://stellargraph.readthedocs.io/en/stable/demos/link-prediction/random-walks/cora-lp-demo.html)." + "For a more detailed example of using Node2Vec for link prediction see [this example](../link-prediction/node2vec-link-prediction.ipynb)." ] }, { diff --git a/stellargraph/layer/cluster_gcn.py b/stellargraph/layer/cluster_gcn.py index 28e058b06..64f487554 100644 --- a/stellargraph/layer/cluster_gcn.py +++ b/stellargraph/layer/cluster_gcn.py @@ -50,8 +50,8 @@ class ClusterGCN: To use this class as a Keras model, the features and pre-processed adjacency matrix should be supplied using the :class:`ClusterNodeGenerator` class. - For more details, please see the Cluster-GCN demo notebook: - demos/node-classification/clustergcn/cluster-gcn-node-classification.ipynb + For more details, please see `the Cluster-GCN demo notebook + `_ Notes: - The inputs are tensors with a batch dimension of 1. These are provided by the \ diff --git a/stellargraph/layer/gcn.py b/stellargraph/layer/gcn.py index 9988517b8..b2a5e6984 100644 --- a/stellargraph/layer/gcn.py +++ b/stellargraph/layer/gcn.py @@ -237,8 +237,7 @@ class GCN: Note that currently the GCN class is compatible with both sparse and dense adjacency matrices and the :class:`FullBatchNodeGenerator` will default to sparse. - For more details, please see the GCN demo notebook: - demos/node-classification/gat/gcn-cora-node-classification-example.ipynb + For more details, please see `the GCN demo notebook `_ Example: Creating a GCN node classification model from an existing :class:`StellarGraph` diff --git a/stellargraph/layer/graph_attention.py b/stellargraph/layer/graph_attention.py index 4ac32bf2f..252dcd8d2 100644 --- a/stellargraph/layer/graph_attention.py +++ b/stellargraph/layer/graph_attention.py @@ -545,8 +545,7 @@ class GAT: ) x_inp, predictions = gat.in_out_tensors() - For more details, please see the GAT demo notebook: - demos/node-classification/gat/gat-cora-node-classification-example.ipynb + For more details, please see `the GAT demo notebook `_ Notes: - The inputs are tensors with a batch dimension of 1. These are provided by the \ diff --git a/stellargraph/layer/graphsage.py b/stellargraph/layer/graphsage.py index 470cdae75..d7726cccc 100644 --- a/stellargraph/layer/graphsage.py +++ b/stellargraph/layer/graphsage.py @@ -757,8 +757,8 @@ class GraphSAGE: Note that passing a `NodeSequence` or `LinkSequence` object from the `generator.flow(...)` method as the `generator=` argument is now deprecated and the base generator object should be passed instead. - For more details, please see the GraphSAGE demo notebooks: - demos/node-classification/graphsage/graphsage-cora-node-classification-example.ipynb + For more details, please see `the GraphSAGE demo notebooks + `_. Args: layer_sizes (list): Hidden feature dimensions for each layer. diff --git a/stellargraph/layer/rgcn.py b/stellargraph/layer/rgcn.py index c175bc96d..c7991bf08 100644 --- a/stellargraph/layer/rgcn.py +++ b/stellargraph/layer/rgcn.py @@ -334,9 +334,7 @@ class RGCN: Note that currently the RGCN class is compatible with both sparse and dense adjacency matrices and the :class:`RelationalFullBatchNodeGenerator` will default to sparse. - For more details, please see the RGCN demo notebook: - - demos/node-classification/rgcn/rgcn-aifb-node-classification-example.ipynb + For more details, please see `the RGCN demo notebook `_ Notes: - The inputs are tensors with a batch dimension of 1. These are provided by the \ From 40e09bed079726b8eecf1b021b89b07ac6fed135 Mon Sep 17 00:00:00 2001 From: Huon Wilson Date: Tue, 5 May 2020 13:03:13 +1000 Subject: [PATCH 40/43] ... -> .. --- demos/community_detection/attacks_clustering_analysis.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/demos/community_detection/attacks_clustering_analysis.ipynb b/demos/community_detection/attacks_clustering_analysis.ipynb index 80a81546c..d1de9a897 100644 --- a/demos/community_detection/attacks_clustering_analysis.ipynb +++ b/demos/community_detection/attacks_clustering_analysis.ipynb @@ -1339,7 +1339,7 @@ "source": [ "### Unsupervised graphSAGE\n", "\n", - "(For a detailed unsupervised GraphSAGE workflow with a narrative, see [Unsupervised graphSAGE demo](.../embeddings/graphsage-unsupervised-sampler-embeddings.ipynb))" + "(For a detailed unsupervised GraphSAGE workflow with a narrative, see [Unsupervised graphSAGE demo](../embeddings/graphsage-unsupervised-sampler-embeddings.ipynb))" ] }, { From 2dd9e0a42a33cac1cd9a2cb85ddfe5b2d3181d82 Mon Sep 17 00:00:00 2001 From: Huon Wilson Date: Tue, 5 May 2020 13:06:25 +1000 Subject: [PATCH 41/43] Fix yet more warnings --- demos/community_detection/attacks_clustering_analysis.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/demos/community_detection/attacks_clustering_analysis.ipynb b/demos/community_detection/attacks_clustering_analysis.ipynb index d1de9a897..e47721b73 100644 --- a/demos/community_detection/attacks_clustering_analysis.ipynb +++ b/demos/community_detection/attacks_clustering_analysis.ipynb @@ -70,7 +70,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "For more detailed explanation of unsupervised graphSAGE see [Unsupervised graphSAGE demo](../embeddings/graphsage-unsupervised-sampler-embeddings.html)." + "For more detailed explanation of unsupervised graphSAGE see [Unsupervised graphSAGE demo](../embeddings/graphsage-unsupervised-sampler-embeddings.ipynb)." ] }, { From d7b0e0ad2c400c4bbb2a7e38871fcd3e761efe1d Mon Sep 17 00:00:00 2001 From: Huon Wilson Date: Tue, 5 May 2020 13:18:56 +1000 Subject: [PATCH 42/43] Update yet links --- stellargraph/layer/hinsage.py | 3 +-- stellargraph/mapper/mini_batch_node_generators.py | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/stellargraph/layer/hinsage.py b/stellargraph/layer/hinsage.py index acc71ca09..fd12f9d40 100644 --- a/stellargraph/layer/hinsage.py +++ b/stellargraph/layer/hinsage.py @@ -275,8 +275,7 @@ class HinSAGE: Note that passing a `NodeSequence` or `LinkSequence` object from the `generator.flow(...)` method as the `generator=` argument is now deprecated and the base generator object should be passed instead. - For more details, please see the HinSAGE demo notebooks: - demos/node-classification/hinsage/yelp-example.py + For more details, please see `the HinSAGE demo notebooks `_. Args: layer_sizes (list): Hidden feature dimensions for each layer diff --git a/stellargraph/mapper/mini_batch_node_generators.py b/stellargraph/mapper/mini_batch_node_generators.py index bfcc2bb19..00feec757 100644 --- a/stellargraph/mapper/mini_batch_node_generators.py +++ b/stellargraph/mapper/mini_batch_node_generators.py @@ -45,7 +45,7 @@ class ClusterNodeGenerator(Generator): [1] `W. Chiang, X. Liu, S. Si, Y. Li, S. Bengio, C. Hsieh, 2019 `_. - For more information, please see `the ClusterGCN demo `_. + For more information, please see `the ClusterGCN demo `_. Args: G (StellarGraph): a machine-learning StellarGraph-type graph From fbd97084290fdd5eddf58f3c32b3abe436d0a5ce Mon Sep 17 00:00:00 2001 From: Huon Wilson Date: Tue, 5 May 2020 13:37:56 +1000 Subject: [PATCH 43/43] Fix formatting --- .../gcn/gcn-cora-node-classification-example.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/demos/node-classification/gcn/gcn-cora-node-classification-example.ipynb b/demos/node-classification/gcn/gcn-cora-node-classification-example.ipynb index d2b5f9c03..5de822bb5 100644 --- a/demos/node-classification/gcn/gcn-cora-node-classification-example.ipynb +++ b/demos/node-classification/gcn/gcn-cora-node-classification-example.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# (Moved) Node classification with Graph Convolutional Network (GCN)", + "# (Moved) Node classification with Graph Convolutional Network (GCN)\n", "\n", "> This demo explains how to do node classification using the StellarGraph library. [See all other demos](../../README.md).\n" ]

Algorithm see T-GCN yesdemodemodemodemo US - DGI + DGI see Cluster-GCNdemodemo
Cluster-GCN yesdemodemo yes yes yesdemodemo yes node features time series, sequencedemodemo yesdemodemo yes US - DGI + DGI yesdemodemo yes yesdemodemo yes US @@ -147,11 +147,11 @@ The demo notebooks can be run without any installation of Python by using Binder yesdemodemo yes US - DGI + DGI via RL via RLdemodemo
yesdemodemodemodemodemodemo
GraphSAGE see HinSAGEdemodemo yesdemodemodemodemo - US - DGI + US + DGI demodemo
yes yesdemoDGIdemoDGI yes
Node2Vec demodemo via RLvia RLdemovia RLvia RLdemo
via RL via RLdemodemo
yes via RLvia RLvia RL yes via RLvia RL via RLdemodemo
via RLdemodemo yes via RLdemodemo yes