{ "info": { "author": "Intuitive Text Mining", "author_email": "intuitivetextmining@gmail.com", "bugtrack_url": null, "classifiers": [], "description": "d3fdgraph\n=========\n\nPlots an interactive force directed graph in a jupyter notebook, taking data from a dataframe of nodes and link weights.\n\n\nWhy d3fdgraph?\n--------------\n\nWorking with data using **python** in the **jupyter** notebook provides many options for visualising that data. \n\nThe **pandas** library provides convenient common visualisations, and there's always the venerable **matplotlib** for more bespoke plots. The new **vega-lite** library is enabled by default in jupyterlab.\n\nSometimes we want to plot the relationships between things as a graph of linked nodes. \n\nThe **networkx** library can plot graphs in a notebook but the plots are static, and only really suitable for smaller data.\n\nBeing able to **interactively** adjust graphs really helps explore larger data.\n\nThat's what **d3fdgraph** does.\n\n\nInstalling d3fdgraph\n--------------------\n\nInstalling **d3fdgraph** is easy.\n:: \n\n pip install d3fdgraph\n\nThis has been tested with Anaconda Python 3.\n\n\nHow To Use\n----------\n\nTo use **d3fdgraph** in a notebook we import the library.\n::\n\n import d3fdgraph\n\n\n**d3fdgraph** takes data in the form of a **pandas dataframe**. \n\nThat dataframe must have 3 columns:\n\n * The first column contains the nodes at the **start** of a link. \n\n * The second column contains the nodes at the **end** of a link. \n\n * The third column contains a link **weight** number. It must be more than 0. \n\nThe larger the **weight**, the more strongly related the two nodes at each end of this link.\n\nHere is an example dataframe:\n\n======= ======= ========\nsource target weight\n======= ======= ========\napple orange 1\napple banana 2\norange mango 2\norange lemon 3\n======= ======= ========\n\nEach row is a link:\n\n * The first row is a link between ``apple`` and ``orange``. These two are connected with a weight of 1.\n * The second row is a link between ``apple`` and ``banana``. These two are more strongly related, with a weight 2.\n * The fourth row is the strongest link, with weight 3, between ``orange`` and ``lemon``.\n\nThe column names don't have to be ``source``, ``target`` and ``weight``. You can have different column names, but it is a good idea to use descriptive names. \n\nThe order of the 3 columns is what matters. **d3fdgraph** will use the first column as the source nodes, the second as the target, and the third as link weights.\n\nTo draw an interactive force directed graph of these nodes and links we simply pass this dataframe to the **plot_force_directed_graph()** function.\n::\n\n d3fdgraph.plot_force_directed_graph(dataframe)\n\nHere is an example of a graph made from different data.\n\n.. image:: https://github.com/intuitivetextmining/d3fdgraph/blob/master/images/d3fdgraph_recipes.gif\n\nThe nodes are labelled with the names of the nodes, as described in the pandas dataframe.\n\nThe nodes are constrained from flying off the edge of the canvas.\n\n\nInteractivity\n-------------\n\nYou can use your pointer to drag nodes around to adjust the graph.\n\nDouble-clicking a node makes it jump to the centre of the canvas, from where it might depart slightly due to the simulated forces.\n\n\nAdditional Parameters\n---------------------\n\n::\n\n plot_force_directed_graph(node1_node1_weight, node_radius=3, link_distance=20, collision_scale=4)\n\nYou don't have to use the additional parameters, but they might help improve the readability of your graph.\n\n * **node_radius** is the radius of the circles drawn for each node, default 3\n * **link_distance** is the length of each link, before divided by the link weight, default 20\n * **collision_scale** is the multiple of the node radius that excludes other nodes, default 4\n * **link_width_scale** scales the width of the drawn links with link weight, default is 4\n\n\nExample Notebook\n----------------\nA simple jupyter notebook showing how **d3fdgraph** can be used is here:\n\n* `simple example notebook `_\n\n\nNote\n----\n\nNote that **d3fdgraph** is only useful in a jupyter notebook. It isn't useful in a terminal, and hasn't been tested in other kinds of python notebook.\n\n\n", "description_content_type": "text/x-rst", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/intuitivetextmining/d3fdgraph", "keywords": "", "license": "GPLv2", "maintainer": "", "maintainer_email": "", "name": "d3fdgraph", "package_url": "https://pypi.org/project/d3fdgraph/", "platform": "", "project_url": "https://pypi.org/project/d3fdgraph/", "project_urls": { "Homepage": "https://github.com/intuitivetextmining/d3fdgraph" }, "release_url": "https://pypi.org/project/d3fdgraph/0.34/", "requires_dist": [ "IPython", "networkx" ], "requires_python": "", "summary": "Interactive force-directed graph in a jupyter notebook.", "version": "0.34" }, "last_serial": 4917596, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "041e747d495fad95f3b9de46c29aeb78", "sha256": "7df664d94513c3d9201859b62559ca3c36ff64b59ba6830d2f06ff4e5cc2f158" }, "downloads": -1, "filename": "d3fdgraph-0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "041e747d495fad95f3b9de46c29aeb78", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 3640, "upload_time": "2019-02-05T18:03:14", "url": "https://files.pythonhosted.org/packages/87/98/e0319c2171b07d745c70818dcef368567d161a7e76ecd469a8ccd97bdc5c/d3fdgraph-0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "203334c80746b89ae57cf29fe6643d2a", "sha256": "ed65b6597ba85bee1746fc923895737faeac10239f207494c4650d87c25e6b42" }, "downloads": -1, "filename": "d3fdgraph-0.1.tar.gz", "has_sig": false, "md5_digest": "203334c80746b89ae57cf29fe6643d2a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2934, "upload_time": "2019-02-05T18:03:17", "url": "https://files.pythonhosted.org/packages/f2/73/5fe4e9fc2c1b85591f08f416e79b9c4bf684f52a822e0836aac66981ae0e/d3fdgraph-0.1.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "350cc8c8a7851ffc9e557c037995ad06", "sha256": "126c1ba7083d8dc15a6430d04cde005c5df5034a6a30b67c1e497e6d5f9bfed3" }, "downloads": -1, "filename": "d3fdgraph-0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "350cc8c8a7851ffc9e557c037995ad06", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 3761, "upload_time": "2019-02-06T18:04:13", "url": "https://files.pythonhosted.org/packages/22/09/ef496054b70dbf33204d31923ecd913e1ac04903491e6196070be1346fa1/d3fdgraph-0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "571c13cb327a11d75cc57be2b64793d4", "sha256": "779075c38f988a0f37f73d0918f835f3910ec71aea957ad5d330f1f7c19d5eb2" }, "downloads": -1, "filename": "d3fdgraph-0.2.tar.gz", "has_sig": false, "md5_digest": "571c13cb327a11d75cc57be2b64793d4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3058, "upload_time": "2019-02-06T18:04:15", "url": "https://files.pythonhosted.org/packages/f4/05/7c1b3afddc17dc0f2370395ea6557f4b9b50765cb83cc3db5ff07f2bbd9b/d3fdgraph-0.2.tar.gz" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "be7f307c29dc646e26b42b49708bcb6e", "sha256": "22c0e3e7720db01ba4bb8d1db167bad18fb6428538199b4db3159adebe814ea1" }, "downloads": -1, "filename": "d3fdgraph-0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "be7f307c29dc646e26b42b49708bcb6e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5015, "upload_time": "2019-02-07T01:42:25", "url": "https://files.pythonhosted.org/packages/56/ec/ff5a8997f793d59b77d841e9c12e421d1a680175e37ab0aa325f1a6f26e7/d3fdgraph-0.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b2dc3a50f1db5d410917d4f1a457ad98", "sha256": "0d829959decb15b0274997a6d891357d1586d2d3c19cb54cacc8f74309f15014" }, "downloads": -1, "filename": "d3fdgraph-0.3.tar.gz", "has_sig": false, "md5_digest": "b2dc3a50f1db5d410917d4f1a457ad98", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4586, "upload_time": "2019-02-07T01:42:26", "url": "https://files.pythonhosted.org/packages/1c/ba/a2869c2e5346da90bbfe4d43df3694619ad363e43f046095eab02bc4ca8c/d3fdgraph-0.3.tar.gz" } ], "0.31": [ { "comment_text": "", "digests": { "md5": "69de0f976fdffbd95ee9e6a6ae069c25", "sha256": "d8a82ad11d70d3dcc61e9905b1f76a411f9968e78e25b5783674bc8b47676ed0" }, "downloads": -1, "filename": "d3fdgraph-0.31-py3-none-any.whl", "has_sig": false, "md5_digest": "69de0f976fdffbd95ee9e6a6ae069c25", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5152, "upload_time": "2019-02-07T17:17:42", "url": "https://files.pythonhosted.org/packages/8c/c7/91fc8721a06a1138fc5d4fcd985374eb0e98227a257becddf1934a2f42c4/d3fdgraph-0.31-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "464b7ed57a01b2a9abe31bf6e0d7f8c9", "sha256": "795babd3ac753d5fd1837ba339e18642912627bb00dc6a33b74996bb98609581" }, "downloads": -1, "filename": "d3fdgraph-0.31.tar.gz", "has_sig": false, "md5_digest": "464b7ed57a01b2a9abe31bf6e0d7f8c9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4721, "upload_time": "2019-02-07T17:17:44", "url": "https://files.pythonhosted.org/packages/c2/34/e677c6892b0b266dd673726163eedde718a881fc32f1889b2ac0f339b1f7/d3fdgraph-0.31.tar.gz" } ], "0.32": [ { "comment_text": "", "digests": { "md5": "4db6549c6a1ec9986b9607da6199d6ab", "sha256": "693d7d52adbfcc19095390d9c3de989671fce5e9458a54fca303fbe27d84b5ff" }, "downloads": -1, "filename": "d3fdgraph-0.32-py3-none-any.whl", "has_sig": false, "md5_digest": "4db6549c6a1ec9986b9607da6199d6ab", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5590, "upload_time": "2019-02-07T23:59:39", "url": "https://files.pythonhosted.org/packages/d3/da/ea08358568dae5d8e568c40eb224b7c0108c7c3de5bf611f6fda761e4a46/d3fdgraph-0.32-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "02c5a4eb516ec69df87ff65274ac91e0", "sha256": "e82b91922e992e44a4f979f642ef4f2dae518e2fe727445e5bdcfa24b1bbbfb1" }, "downloads": -1, "filename": "d3fdgraph-0.32.tar.gz", "has_sig": false, "md5_digest": "02c5a4eb516ec69df87ff65274ac91e0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5113, "upload_time": "2019-02-07T23:59:41", "url": "https://files.pythonhosted.org/packages/fa/e7/b30d1cbe850f0c34745bfb7e14dbd62064a45adf852e2b921ba64eb8e8aa/d3fdgraph-0.32.tar.gz" } ], "0.33": [ { "comment_text": "", "digests": { "md5": "fc0a3438ab5318e049ecd31231a595c6", "sha256": "778a89d8f5bdf74369d9ea336d5e895bc6320f330b3bbf6c134e3f12fc6a7037" }, "downloads": -1, "filename": "d3fdgraph-0.33-py3-none-any.whl", "has_sig": false, "md5_digest": "fc0a3438ab5318e049ecd31231a595c6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5589, "upload_time": "2019-02-08T00:17:18", "url": "https://files.pythonhosted.org/packages/43/2a/34364af6986a1b9d98def6d17e8e7739a5792dbc0342d3cb1b71d86d760e/d3fdgraph-0.33-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8b6d0150737179ee906d19c22f3a04be", "sha256": "2127a4e9da6a338190c97767c3c11c86878c715353a551367691bfcacec340be" }, "downloads": -1, "filename": "d3fdgraph-0.33.tar.gz", "has_sig": false, "md5_digest": "8b6d0150737179ee906d19c22f3a04be", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5108, "upload_time": "2019-02-08T00:17:19", "url": "https://files.pythonhosted.org/packages/bc/af/479411c812d93d976c654fa84225798fab1f175c515fd299199f3df6787a/d3fdgraph-0.33.tar.gz" } ], "0.34": [ { "comment_text": "", "digests": { "md5": "947f4c19262ffb3d7095ca24c383139f", "sha256": "42ccb593bbbb0a496825213de671dae1f89359c8e91094876823b22625ae41e5" }, "downloads": -1, "filename": "d3fdgraph-0.34-py3-none-any.whl", "has_sig": false, "md5_digest": "947f4c19262ffb3d7095ca24c383139f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5624, "upload_time": "2019-03-09T00:17:26", "url": "https://files.pythonhosted.org/packages/0e/b4/f53b5ade624fee866e253cb30b43c1d4f02b7145126c18548350a39d976e/d3fdgraph-0.34-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "48a510ccfa85396824a21beb3537708e", "sha256": "2dffcd25a958b4ca8e34b639f29ea207125d7694dcb6d7cc0fdf9139e7306ab4" }, "downloads": -1, "filename": "d3fdgraph-0.34.tar.gz", "has_sig": false, "md5_digest": "48a510ccfa85396824a21beb3537708e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5111, "upload_time": "2019-03-09T00:17:27", "url": "https://files.pythonhosted.org/packages/c9/3f/923b08030e80350adcaf517ad3580954299b065766486bfe99a12bd33c2e/d3fdgraph-0.34.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "947f4c19262ffb3d7095ca24c383139f", "sha256": "42ccb593bbbb0a496825213de671dae1f89359c8e91094876823b22625ae41e5" }, "downloads": -1, "filename": "d3fdgraph-0.34-py3-none-any.whl", "has_sig": false, "md5_digest": "947f4c19262ffb3d7095ca24c383139f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5624, "upload_time": "2019-03-09T00:17:26", "url": "https://files.pythonhosted.org/packages/0e/b4/f53b5ade624fee866e253cb30b43c1d4f02b7145126c18548350a39d976e/d3fdgraph-0.34-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "48a510ccfa85396824a21beb3537708e", "sha256": "2dffcd25a958b4ca8e34b639f29ea207125d7694dcb6d7cc0fdf9139e7306ab4" }, "downloads": -1, "filename": "d3fdgraph-0.34.tar.gz", "has_sig": false, "md5_digest": "48a510ccfa85396824a21beb3537708e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5111, "upload_time": "2019-03-09T00:17:27", "url": "https://files.pythonhosted.org/packages/c9/3f/923b08030e80350adcaf517ad3580954299b065766486bfe99a12bd33c2e/d3fdgraph-0.34.tar.gz" } ] }