{
"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
}