{ "cells": [ { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "# %conda activate py38\n", "# %pip install stellargraph chardet spektral -Uq" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "2021-11-03 03:47:25.594278: I tensorflow/core/platform/cpu_feature_guard.cc:142] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations: AVX2 FMA\n", "To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.\n" ] } ], "source": [ "%reload_ext autoreload\n", "%autoreload 2\n", "\n", "import stellargraph as sg\n", "import pandas as pd" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "StellarGraph: Undirected multigraph\n", " Nodes: 6, Edges: 5\n", "\n", " Node types:\n", " task: [3]\n", " Features: float32 vector, length 1\n", " Edge types: task-default->construct, task-default->task\n", " construct: [3]\n", " Features: float32 vector, length 1\n", " Edge types: construct-default->construct, construct-default->task\n", "\n", " Edge types:\n", " task-default->task: [2]\n", " Weights: range=[1, 2], mean=1.5, std=0.707107\n", " Features: none\n", " construct-default->construct: [2]\n", " Weights: range=[10, 12], mean=11, std=1.41421\n", " Features: none\n", " construct-default->task: [1]\n", " Weights: all 10\n", " Features: none\n" ] } ], "source": [ "tasks = pd.DataFrame(\n", " [10,20,30],\n", " index = ['t1','t2','t3']\n", ")\n", "\n", "constructs = pd.DataFrame(\n", " [50,60,70],\n", " index = ['c1','c2','c3']\n", ")\n", "\n", "edges = pd.DataFrame(\n", " {'source': ['t1', 't2', 'c1', 'c2', 't1'],\n", " 'target': ['t2', 't3', 'c2', 'c1', 'c1'],\n", " 'weight': [1, 2, 10, 12, 10]},\n", ")\n", "\n", "G = sg.StellarGraph({'task': tasks, 'construct': constructs}, edges=edges)\n", "print(G.info())\n" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Number of random walks: {len(walks)}\n" ] }, { "data": { "text/plain": [ "[['c1', 'c2', 'c1', 'c2', 'c1'],\n", " ['c2', 'c1', 'c2', 'c1', 'c2'],\n", " ['c3'],\n", " ['t1', 'c1', 't1', 'c1', 't1'],\n", " ['t1', 'c1', 'c2'],\n", " ['t2'],\n", " ['t2'],\n", " ['t3'],\n", " ['t3']]" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# metapath2vec\n", "\n", "rnd_walk_length = 5 # maximum length of a random walk\n", "\n", "# metapath schemas as a list of lists of node types.\n", "metapaths = [\n", " ['task', 'construct', 'task'],\n", " ['construct', 'construct'],\n", " ['task', 'construct', 'construct', 'task'],\n", "]\n", "\n", "\n", "from stellargraph.data import UniformRandomMetaPathWalk\n", "\n", "rw = UniformRandomMetaPathWalk(G)\n", "\n", "walks = rw.run(\n", " nodes=list(G.nodes()), # root nodes\n", " length=rnd_walk_length, # maximum length of a random walk\n", " n=1, # number of random walks per root node\n", " metapaths=metapaths, # the metapaths\n", ")\n", "\n", "print('Number of random walks: {len(walks)}')\n", "walks" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "shape: (6, 128)\n" ] }, { "data": { "text/plain": [ "[('c1', 0.0630912259221077),\n", " ('t2', 0.02670864760875702),\n", " ('t3', -0.016970207914710045),\n", " ('c2', -0.07985257357358932),\n", " ('c3', -0.15879441797733307)]" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from gensim.models import Word2Vec\n", "\n", "model = Word2Vec(walks, vector_size=128, window=5, min_count=0, sg=1, workers=2, epochs=1)\n", "print('shape:', model.wv.vectors.shape)\n", "model.wv.most_similar('t1')" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/usr/local/Caskroom/miniforge/base/envs/py38/lib/python3.8/site-packages/sklearn/manifold/_t_sne.py:819: FutureWarning: 'square_distances' has been introduced in 0.24 to help phase out legacy squaring behavior. The 'legacy' setting will be removed in 1.1 (renaming of 0.26), and the default setting will be changed to True. In 1.3, 'square_distances' will be removed altogether, and distances will be squared by default. Set 'square_distances'=True to silence this warning.\n", " warnings.warn(\n", "/usr/local/Caskroom/miniforge/base/envs/py38/lib/python3.8/site-packages/sklearn/manifold/_t_sne.py:982: FutureWarning: The PCA initialization in TSNE will change to have the standard deviation of PC1 equal to 1e-4 in 1.2. This will ensure better convergence.\n", " warnings.warn(\n" ] }, { "data": { "image/png": "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", "text/plain": [ "<Figure size 360x360 with 1 Axes>" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# viz\n", "\n", "node_embeddings = model.wv.vectors\n", "node_types = [G.node_type(node_id) for node_id in model.wv.index_to_key]\n", "\n", "from sklearn.manifold import TSNE\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "\n", "node_embeddings_2d = TSNE(n_components=2, learning_rate='auto', init='pca', metric='cosine').fit_transform(node_embeddings)\n", "node_embeddings_2d\n", "\n", "label_map = {l: i for i, l in enumerate(np.unique(node_types))}\n", "node_colors = [label_map[t] for t in node_types]\n", "\n", "plt.figure(figsize=(5, 5))\n", "plt.axes().set(aspect=\"equal\")\n", "plt.scatter(node_embeddings_2d[:, 0], node_embeddings_2d[:, 1], c=node_colors, alpha=0.3)\n", "plt.title('2d projection of the node embeddings')\n", "plt.show()" ] } ], "metadata": { "interpreter": { "hash": "4bc0b60e31b0a7441a2e25ec194980ab62b84e91a65eae3f6b114824d9f7dec0" }, "kernelspec": { "display_name": "Python 3.8.12 64-bit ('py38': conda)", "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.8.12" }, "orig_nbformat": 4 }, "nbformat": 4, "nbformat_minor": 2 }