{ "info": { "author": "Emmanouil Krasanakis", "author_email": "maniospas@hotmail.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: Apache Software License", "Operating System :: OS Independent", "Programming Language :: Python :: 3" ], "description": "# pygrank\nRecommendation algorithms for large graphs.\n\n## Installation\n```\npip install pygrank\n```\n\n## Usage\n###### How to run a PageRank algorithm\n```python\nimport networkx as nx\nfrom pygrank.algorithms.pagerank import PageRank as Ranker\nfrom pygrank.algorithms.oversampling import SeedOversampling as Oversampler\n\nG = nx.Graph()\nseeds = list()\n... # insert graph nodes and select some of them as seeds (e.g. see tests.py)\n\nalgorithm = Oversampler(Ranker(alpha=0.85, tol=1.E-6, max_iters=100)) # default values used\nranks = algorithm.rank(G, {v: 1 for v in seeds})\n```\n\n###### Hash graph normalization\n```python\nimport networkx as nx\nfrom pygrank.algorithms.pagerank import PageRank as Ranker\nfrom pygrank.algorithms.utils import preprocessor\n\nG = nx.Graph()\nseeds1 = list()\nseeds2 = list()\n... # insert graph nodes and select some of them as seeds (e.g. see tests.py)\n\nalgorithm = Ranker(alpha=0.8, to_scipy=preprocessor(normalization=\"col\", assume_immutability=True))\nranks = algorithm.rank(G, {v: 1 for v in seeds1})\nranks = algorithm.rank(G, {v: 1 for v in seeds2}) # does not re-compute the normalization\n```\n\n###### How to evaluate with an unsupervised metric\n```python\nfrom pygrank.algorithms.postprocess import Normalize\nfrom pygrank.metrics.unsupervised import Conductance\n\nG, ranks = ... # calculate as per the first example\nnormalized_ranks = Normalize().rank(ranks)\n\nmetric = Conductance(G)\nprint(metric.evaluate(normalized_ranks))\n```\n\n###### How to evaluate with a supervised metric\n```python\nfrom pygrank.metrics.supervised import AUC\nimport pygrank.metrics.utils\n\nG, seeds, algorithm = ... # as per the first example\nseeds, ground_truth = pygrank.metrics.utils.split_groups(seeds, fraction_of_training=0.5)\n\npygrank.metrics.utils.remove_group_edges_from_graph(G, ground_truth)\nranks = algorithm.rank(G, {v: 1 for v in seeds})\n\nmetric = AUC({v: 1 for v in ground_truth})\nprint(metric.evaluate(ranks))\n```\n\n###### How to evaluate multiple ranks\n```python\nimport networkx as nx\nfrom pygrank.algorithms.pagerank import PageRank as Ranker\nfrom pygrank.algorithms.postprocess import Normalize as Normalizer\nfrom pygrank.algorithms.oversampling import BoostedSeedOversampling as Oversampler\nfrom pygrank.metrics.unsupervised import Conductance\nfrom pygrank.metrics.supervised import AUC\nfrom pygrank.metrics.multigroup import MultiUnsupervised, MultiSupervised, LinkAUC\nimport pygrank.metrics.utils\n\n# Construct data\nG = nx.Graph()\ngroups = {}\ngroups[\"group1\"] = list()\n... \n\n# Split to training and test data\ntraining_groups, test_groups = pygrank.metrics.utils.split_groups(groups)\npygrank.metrics.utils.remove_group_edges_from_graph(G, test_groups)\n\n# Calculate ranks and put them in a map\nalgorithm = Normalizer(Oversampler(Ranker(alpha=0.99)))\nranks = {group_id: algorithm.rank(G, {v: 1 for v in group}) \n for group_id, group in training_groups.items()}\n\n\n# Evaluation with Conductance\nconductance = MultiUnsupervised(Conductance, G)\nprint(conductance.evaluate(ranks))\n\n# Evaluation with LinkAUC\nlink_AUC = LinkAUC(G, pygrank.metrics.utils.to_nodes(test_groups))\nprint(link_AUC.evaluate(ranks))\n\n# Evaluation with AUC\nauc = MultiSupervised(AUC, pygrank.metrics.utils.to_seeds(test_groups))\nprint(auc.evaluate(ranks))\n\n```\n\n\n## References\n```\n@article{krasanakis2019boosted,\n title={Boosted seed oversampling for local community ranking},\n author={Krasanakis, Emmanouil and Schinas, Emmanouil and Papadopoulos, Symeon and Kompatsiaris, Yiannis and Symeonidis, Andreas},\n journal={Information Processing \\& Management},\n pages={102053},\n year={2019},\n publisher={Elsevier}\n}\n```\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/MKLab-ITI/pygrank", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "pygrank", "package_url": "https://pypi.org/project/pygrank/", "platform": "", "project_url": "https://pypi.org/project/pygrank/", "project_urls": { "Homepage": "https://github.com/MKLab-ITI/pygrank" }, "release_url": "https://pypi.org/project/pygrank/0.1.8/", "requires_dist": [ "tqdm", "sklearn", "scipy", "numpy", "networkx" ], "requires_python": "", "summary": "Recommendation algorithms for large graphs on networkx", "version": "0.1.8" }, "last_serial": 5989963, "releases": { "0.1.4": [ { "comment_text": "", "digests": { "md5": "a899483269b02a15c5be2cb2b7d0fc3b", "sha256": "ed28f58108dc2ad300b9acebc48dd6b57f2f70f479e5e0754eb69acf5c10e521" }, "downloads": -1, "filename": "pygrank-0.1.4-py3-none-any.whl", "has_sig": false, "md5_digest": "a899483269b02a15c5be2cb2b7d0fc3b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 13193, "upload_time": "2019-09-25T09:41:46", "url": "https://files.pythonhosted.org/packages/e7/77/583dd73a6a153d76851a47ed9b9b43c6a1303632614cae65018025e8ec2c/pygrank-0.1.4-py3-none-any.whl" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "da87facd22cef121e072a2ce7820c1b5", "sha256": "dc982f6ef0294482ff483da61e53876be7ab25e39ef6bd75870c9f3974304e9f" }, "downloads": -1, "filename": "pygrank-0.1.5-py3-none-any.whl", "has_sig": false, "md5_digest": "da87facd22cef121e072a2ce7820c1b5", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 14840, "upload_time": "2019-10-01T09:18:11", "url": "https://files.pythonhosted.org/packages/5f/a9/bf821e6583d49813a101ace246dbaeb2aefc5c2c8f6c0203780fbc7448d8/pygrank-0.1.5-py3-none-any.whl" } ], "0.1.7": [ { "comment_text": "", "digests": { "md5": "6d19b58d53ac19f34442fee55de4ecfd", "sha256": "a871b140ff7cb31fc6fd2a8b277da9ebfe1de2911c7a6f5841df3c1d057654f8" }, "downloads": -1, "filename": "pygrank-0.1.7-py3-none-any.whl", "has_sig": false, "md5_digest": "6d19b58d53ac19f34442fee55de4ecfd", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 14909, "upload_time": "2019-10-02T09:46:15", "url": "https://files.pythonhosted.org/packages/e3/ab/f7fbd042cea52ed31211dc089f90856b7169aa8c6b39085a7ecc8b2daadc/pygrank-0.1.7-py3-none-any.whl" } ], "0.1.8": [ { "comment_text": "", "digests": { "md5": "22e41864e06df950531e5fe67a40333c", "sha256": "76239ea29f617f31c14484985494cd55478bb87ca98dbb0a0d6edc49e67c91b8" }, "downloads": -1, "filename": "pygrank-0.1.8-py3-none-any.whl", "has_sig": false, "md5_digest": "22e41864e06df950531e5fe67a40333c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 15704, "upload_time": "2019-10-17T14:00:34", "url": "https://files.pythonhosted.org/packages/92/1b/3c1af8acb315fffacb9fd15c1a44fbbdda120316122248ec0cab18422dc0/pygrank-0.1.8-py3-none-any.whl" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "22e41864e06df950531e5fe67a40333c", "sha256": "76239ea29f617f31c14484985494cd55478bb87ca98dbb0a0d6edc49e67c91b8" }, "downloads": -1, "filename": "pygrank-0.1.8-py3-none-any.whl", "has_sig": false, "md5_digest": "22e41864e06df950531e5fe67a40333c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 15704, "upload_time": "2019-10-17T14:00:34", "url": "https://files.pythonhosted.org/packages/92/1b/3c1af8acb315fffacb9fd15c1a44fbbdda120316122248ec0cab18422dc0/pygrank-0.1.8-py3-none-any.whl" } ] }