{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Different ways to load an input graph\n", "\n", "We recommend using the GML graph format to load a graph. You can also use the DOT format, which requires additional dependencies (either pydot or pygraphviz). \n", "\n", "DoWhy supports both loading a graph as a string, or as a file (with the extensions 'gml' or 'dot').\n", "\n", "Below is an example showing the different ways of loading the same graph. " ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import os, sys\n", "import random\n", "sys.path.append(os.path.abspath(\"../../../\"))" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd\n", "\n", "import dowhy\n", "from dowhy import CausalModel\n", "from IPython.display import Image, display" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## I. Generating dummy data\n", "We generate some dummy data for three variables: X, Y and Z. " ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
ZXY
0500
12110
28220
39330
43440
56550
61660
74770
80880
97990
\n", "
" ], "text/plain": [ " Z X Y\n", "0 5 0 0\n", "1 2 1 10\n", "2 8 2 20\n", "3 9 3 30\n", "4 3 4 40\n", "5 6 5 50\n", "6 1 6 60\n", "7 4 7 70\n", "8 0 8 80\n", "9 7 9 90" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "z=[i for i in range(10)]\n", "random.shuffle(z)\n", "df = pd.DataFrame(data = {'Z': z, 'X': range(0,10), 'Y': range(0,100,10)})\n", "df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## II. Loading GML or DOT graphs\n", "### GML format" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "INFO:dowhy.causal_graph:If this is observed data (not from a randomized experiment), there might always be missing confounders. Adding a node named \"Unobserved Confounders\" to reflect this.\n", "INFO:dowhy.causal_model:Model to find the causal effect of treatment ['X'] on outcome ['Y']\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# With GML string\n", "model=CausalModel(\n", " data = df,\n", " treatment='X',\n", " outcome='Y',\n", " graph=\"\"\"graph[directed 1 node[id \"Z\" label \"Z\"] \n", " node[id \"X\" label \"X\"]\n", " node[id \"Y\" label \"Y\"] \n", " edge[source \"Z\" target \"X\"] \n", " edge[source \"Z\" target \"Y\"] \n", " edge[source \"X\" target \"Y\"]]\"\"\"\n", " \n", " )\n", "model.view_model()\n", "\n", "\n", "display(Image(filename=\"causal_model.png\"))" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "INFO:dowhy.causal_graph:If this is observed data (not from a randomized experiment), there might always be missing confounders. Adding a node named \"Unobserved Confounders\" to reflect this.\n", "INFO:dowhy.causal_model:Model to find the causal effect of treatment ['X'] on outcome ['Y']\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# With GML file\n", "model=CausalModel(\n", " data = df,\n", " treatment='X',\n", " outcome='Y',\n", " graph=\"../example_graphs/simple_graph_example.gml\"\n", " )\n", "model.view_model()\n", "\n", "\n", "display(Image(filename=\"causal_model.png\"))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### DOT format" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "INFO:dowhy.causal_graph:If this is observed data (not from a randomized experiment), there might always be missing confounders. Adding a node named \"Unobserved Confounders\" to reflect this.\n", "INFO:dowhy.causal_model:Model to find the causal effect of treatment ['X'] on outcome ['Y']\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# With DOT string\n", "model=CausalModel(\n", " data = df,\n", " treatment='X',\n", " outcome='Y',\n", " graph=\"digraph {Z -> X;Z -> Y;X -> Y;}\"\n", " )\n", "model.view_model()\n", "\n", "from IPython.display import Image, display\n", "display(Image(filename=\"causal_model.png\"))" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "INFO:dowhy.causal_graph:If this is observed data (not from a randomized experiment), there might always be missing confounders. Adding a node named \"Unobserved Confounders\" to reflect this.\n", "INFO:dowhy.causal_model:Model to find the causal effect of treatment ['X'] on outcome ['Y']\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# With DOT file\n", "model=CausalModel(\n", " data = df,\n", " treatment='X',\n", " outcome='Y',\n", " graph=\"../example_graphs/simple_graph_example.dot\"\n", " )\n", "model.view_model()\n", "\n", "\n", "display(Image(filename=\"causal_model.png\"))" ] } ], "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": 2 }