Buscar

Enterprise Architecture

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

{"nbformat":4,"nbformat_minor":0,"metadata":{"colab":{"name":"Enterprise Architecture.ipynb","provenance":[],"collapsed_sections":[]},"kernelspec":{"name":"python2","display_name":"Python 2"}},"cells":[{"cell_type":"markdown","metadata":{"id":"LGFCjlCGxdmD"},"source":["# Install Script Requirements and import python libraries"]},{"cell_type":"markdown","metadata":{"id":"tZNWChHrHYNc"},"source":["Install the required libraries and graphviz software on colab workspace (ubuntu environment)\n","\n","---\n","\n"]},{"cell_type":"code","metadata":{"id":"fmdYmT8mHNkA","cellView":"code","colab":{"base_uri":"https://localhost:8080/","height":3060},"executionInfo":{"status":"ok","timestamp":1527575610096,"user_tz":-120,"elapsed":20298,"user":{"displayName":"Davide Fedele Contalbo","photoUrl":"//lh5.googleusercontent.com/-v0RG0096I0Q/AAAAAAAAAAI/AAAAAAAATps/qIIjbrZfv_M/s50-c-k-no/photo.jpg","userId":"109102974191300831816"}},"outputId":"bb0caf76-c1cf-4a3b-deb3-bbc57205598a"},"source":["!pip install xlrd\n","!pip install pandas\n","!pip install graphviz\n","!apt-get install graphviz -y"],"execution_count":null,"outputs":[{"output_type":"stream","text":["Collecting xlrd\n","\u001b[?25l Downloading https://files.pythonhosted.org/packages/07/e6/e95c4eec6221bfd8528bcc4ea252a850bffcc4be88ebc367e23a1a84b0bb/xlrd-1.1.0-py2.py3-none-any.whl (108kB)\n","\u001b[K 100% |████████████████████████████████| 112kB 4.5MB/s \n","\u001b[?25hInstalling collected packages: xlrd\n","Successfully installed xlrd-1.1.0\n","Requirement already satisfied: pandas in /usr/local/lib/python2.7/dist-packages (0.22.0)\n","Requirement already satisfied: pytz>=2011k in /usr/local/lib/python2.7/dist-packages (from pandas) (2018.4)\n","Requirement already satisfied: python-dateutil in /usr/local/lib/python2.7/dist-packages (from pandas) (2.5.3)\n","Requirement already satisfied: numpy>=1.9.0 in /usr/local/lib/python2.7/dist-packages (from pandas) (1.14.3)\n","Requirement already satisfied: six>=1.5 in /usr/local/lib/python2.7/dist-packages (from python-dateutil->pandas) (1.11.0)\n","Collecting graphviz\n"," Downloading https://files.pythonhosted.org/packages/84/44/21a7fdd50841aaaef224b943f7d10df87e476e181bb926ccf859bcb53d48/graphviz-0.8.3-py2.py3-none-any.whl\n","Installing collected packages: graphviz\n","Successfully installed graphviz-0.8.3\n","Reading package lists... Done\n","Building dependency tree \n","Reading state information... Done\n","The following additional packages will be installed:\n"," fontconfig libcairo2 libcdt5 libcgraph6 libdatrie1 libgd3 libgraphite2-3\n"," libgvc6 libgvpr2 libharfbuzz0b libjbig0 libltdl7 libpango-1.0-0\n"," libpangocairo-1.0-0 libpangoft2-1.0-0 libpathplan4 libpixman-1-0\n"," libthai-data libthai0 libtiff5 libwebp6 libxaw7 libxcb-render0 libxcb-shm0\n"," libxmu6 libxpm4 libxt6\n","Suggested packages:\n"," gsfonts graphviz-doc libgd-tools\n","The following NEW packages will be installed:\n"," fontconfig graphviz libcairo2 libcdt5 libcgraph6 libdatrie1 libgd3\n"," libgraphite2-3 libgvc6 libgvpr2 libharfbuzz0b libjbig0 libltdl7\n"," libpango-1.0-0 libpangocairo-1.0-0 libpangoft2-1.0-0 libpathplan4\n"," libpixman-1-0 libthai-data libthai0 libtiff5 libwebp6 libxaw7 libxcb-render0\n"," libxcb-shm0 libxmu6 libxpm4 libxt6\n","0 upgraded, 28 newly installed, 0 to remove and 0 not upgraded.\n","Need to get 4,122 kB of archives.\n","After this operation, 20.6 MB of additional disk space will be used.\n","Get:1 http://archive.ubuntu.com/ubuntu artful/main amd64 fontconfig amd64 2.11.94-0ubuntu2 [177 kB]\n","Get:2 http://archive.ubuntu.com/ubuntu artful/main amd64 libjbig0 amd64 2.1-3.1 [26.6 kB]\n","Get:3 http://archive.ubuntu.com/ubuntu artful/main amd64 libcdt5 amd64 2.38.0-16ubuntu2 [19.5 kB]\n","Get:4 http://archive.ubuntu.com/ubuntu artful/main amd64 libcgraph6 amd64 2.38.0-16ubuntu2 [40.0 kB]\n","Get:5 http://archive.ubuntu.com/ubuntu artful-updates/main amd64 libtiff5 amd64 4.0.8-5ubuntu0.1 [150 kB]\n","Get:6 http://archive.ubuntu.com/ubuntu artful/main amd64 libwebp6 amd64 0.6.0-3 [181 kB]\n","Get:7 http://archive.ubuntu.com/ubuntu artful/main amd64 libxpm4 amd64 1:3.5.12-1 [34.0 kB]\n","Get:8 http://archive.ubuntu.com/ubuntu artful/main amd64 libgd3 amd64 2.2.5-3 [119 kB]\n","Get:9 http://archive.ubuntu.com/ubuntu artful/main amd64 libpixman-1-0 amd64 0.34.0-1 [230 kB]\n","Get:10 http://archive.ubuntu.com/ubuntu artful/main amd64 libxcb-render0 amd64 1.12-1ubuntu1 [14.8 kB]\n","Get:11 http://archive.ubuntu.com/ubuntu artful/main amd64 libxcb-shm0 amd64 1.12-1ubuntu1 [5,482 B]\n","Get:12 http://archive.ubuntu.com/ubuntu artful/main amd64 libcairo2 amd64 1.14.10-1ubuntu1 [558 kB]\n","Get:13 http://archive.ubuntu.com/ubuntu artful/main amd64 libltdl7 amd64 2.4.6-2 [38.8 kB]\n","Get:14 http://archive.ubuntu.com/ubuntu artful/main amd64 libthai-data all 0.1.26-3 [132 kB]\n","Get:15 http://archive.ubuntu.com/ubuntu artful/main amd64 libdatrie1 amd64 0.2.10-5 [17.6 kB]\n","Get:16 http://archive.ubuntu.com/ubuntu artful/main amd64 libthai0 amd64 0.1.26-3 [17.7 kB]\n","Get:17 http://archive.ubuntu.com/ubuntu artful/main amd64 libpango-1.0-0 amd64 1.40.12-1 [152 kB]\n","Get:18 http://archive.ubuntu.com/ubuntu artful/main amd64 libgraphite2-3 amd64 1.3.10-2 [78.3 kB]\n","Get:19 http://archive.ubuntu.com/ubuntu artful/main amd64 libharfbuzz0b amd64 1.4.2-1 [211 kB]\n","Get:20 http://archive.ubuntu.com/ubuntu artful/main amd64 libpangoft2-1.0-0 amd64 1.40.12-1 [33.2 kB]\n","Get:21 http://archive.ubuntu.com/ubuntu artful/main amd64 libpangocairo-1.0-0 amd64 1.40.12-1 [20.8 kB]\n","Get:22 http://archive.ubuntu.com/ubuntu artful/main amd64 libpathplan4 amd64 2.38.0-16ubuntu2 [22.6 kB]\n","Get:23 http://archive.ubuntu.com/ubuntu artful/main amd64 libgvc6 amd64 2.38.0-16ubuntu2 [587 kB]\n","Get:24 http://archive.ubuntu.com/ubuntu artful/main amd64 libgvpr2 amd64 2.38.0-16ubuntu2 [167 kB]\n","Get:25 http://archive.ubuntu.com/ubuntu artful/main amd64 libxt6 amd64 1:1.1.5-1 [160 kB]\n","Get:26 http://archive.ubuntu.com/ubuntu artful/main amd64 libxmu6 amd64 2:1.1.2-2 [46.0 kB]\n","Get:27 http://archive.ubuntu.com/ubuntu artful/main amd64 libxaw7 amd64 2:1.0.13-1 [173 kB]\n","Get:28 http://archive.ubuntu.com/ubuntu artful/main amd64 graphviz amd64 2.38.0-16ubuntu2 [710 kB]\n","Fetched 4,122 kB in 1s (2,197 kB/s)\n","Selecting previously unselected package fontconfig.\n","(Reading database ... 18298 files and directories currently installed.)\n","Preparing to unpack .../00-fontconfig_2.11.94-0ubuntu2_amd64.deb ...\n","Unpacking fontconfig (2.11.94-0ubuntu2) ...\n","Selecting previously unselected package libjbig0:amd64.\n","Preparing to unpack .../01-libjbig0_2.1-3.1_amd64.deb ...\n","Unpacking libjbig0:amd64 (2.1-3.1) ...\n"],"name":"stdout"},{"output_type":"stream","text":["Selecting previously unselected package libcdt5.\r\n","Preparing to unpack .../02-libcdt5_2.38.0-16ubuntu2_amd64.deb ...\r\n","Unpacking libcdt5 (2.38.0-16ubuntu2) ...\n","Selecting previously unselected package libcgraph6.\n","Preparing to unpack .../03-libcgraph6_2.38.0-16ubuntu2_amd64.deb ...\n","Unpacking libcgraph6 (2.38.0-16ubuntu2) ...\n","Selecting previously unselected package libtiff5:amd64.\n","Preparing to unpack .../04-libtiff5_4.0.8-5ubuntu0.1_amd64.deb ...\n","Unpacking libtiff5:amd64 (4.0.8-5ubuntu0.1) ...\n","Selecting previously unselected package libwebp6:amd64.\n","Preparing to unpack .../05-libwebp6_0.6.0-3_amd64.deb ...\n","Unpacking libwebp6:amd64 (0.6.0-3) ...\n","Selecting previously unselected package libxpm4:amd64.\n","Preparing to unpack .../06-libxpm4_1%3a3.5.12-1_amd64.deb ...\n","Unpacking libxpm4:amd64 (1:3.5.12-1) ...\n","Selecting previously unselected package libgd3:amd64.\n","Preparing to unpack .../07-libgd3_2.2.5-3_amd64.deb ...\n","Unpacking libgd3:amd64 (2.2.5-3) ...\n","Selecting previously unselected package libpixman-1-0:amd64.\n","Preparing to unpack .../08-libpixman-1-0_0.34.0-1_amd64.deb ...\n","Unpacking libpixman-1-0:amd64 (0.34.0-1) ...\n","Selecting previously unselected package libxcb-render0:amd64.\n","Preparing
to unpack .../09-libxcb-render0_1.12-1ubuntu1_amd64.deb ...\n","Unpacking libxcb-render0:amd64 (1.12-1ubuntu1) ...\n","Selecting previously unselected package libxcb-shm0:amd64.\n","Preparing to unpack .../10-libxcb-shm0_1.12-1ubuntu1_amd64.deb ...\n","Unpacking libxcb-shm0:amd64 (1.12-1ubuntu1) ...\n","Selecting previously unselected package libcairo2:amd64.\n","Preparing to unpack .../11-libcairo2_1.14.10-1ubuntu1_amd64.deb ...\n","Unpacking libcairo2:amd64 (1.14.10-1ubuntu1) ...\n","Selecting previously unselected package libltdl7:amd64.\n","Preparing to unpack .../12-libltdl7_2.4.6-2_amd64.deb ...\n","Unpacking libltdl7:amd64 (2.4.6-2) ...\n","Selecting previously unselected package libthai-data.\n","Preparing to unpack .../13-libthai-data_0.1.26-3_all.deb ...\n","Unpacking libthai-data (0.1.26-3) ...\n","Selecting previously unselected package libdatrie1:amd64.\n","Preparing to unpack .../14-libdatrie1_0.2.10-5_amd64.deb ...\n","Unpacking libdatrie1:amd64 (0.2.10-5) ...\n","Selecting previously unselected package libthai0:amd64.\n","Preparing to unpack .../15-libthai0_0.1.26-3_amd64.deb ...\n","Unpacking libthai0:amd64 (0.1.26-3) ...\n","Selecting previously unselected package libpango-1.0-0:amd64.\n","Preparing to unpack .../16-libpango-1.0-0_1.40.12-1_amd64.deb ...\n","Unpacking libpango-1.0-0:amd64 (1.40.12-1) ...\n","Selecting previously unselected package libgraphite2-3:amd64.\n","Preparing to unpack .../17-libgraphite2-3_1.3.10-2_amd64.deb ...\n","Unpacking libgraphite2-3:amd64 (1.3.10-2) ...\n","Selecting previously unselected package libharfbuzz0b:amd64.\n","Preparing to unpack .../18-libharfbuzz0b_1.4.2-1_amd64.deb ...\n","Unpacking libharfbuzz0b:amd64 (1.4.2-1) ...\n","Selecting previously unselected package libpangoft2-1.0-0:amd64.\n","Preparing to unpack .../19-libpangoft2-1.0-0_1.40.12-1_amd64.deb ...\n","Unpacking libpangoft2-1.0-0:amd64 (1.40.12-1) ...\n","Selecting previously unselected package libpangocairo-1.0-0:amd64.\n","Preparing to unpack .../20-libpangocairo-1.0-0_1.40.12-1_amd64.deb ...\n","Unpacking libpangocairo-1.0-0:amd64 (1.40.12-1) ...\n","Selecting previously unselected package libpathplan4.\n","Preparing to unpack .../21-libpathplan4_2.38.0-16ubuntu2_amd64.deb ...\n","Unpacking libpathplan4 (2.38.0-16ubuntu2) ...\n","Selecting previously unselected package libgvc6.\n","Preparing to unpack .../22-libgvc6_2.38.0-16ubuntu2_amd64.deb ...\n","Unpacking libgvc6 (2.38.0-16ubuntu2) ...\n","Selecting previously unselected package libgvpr2.\n","Preparing to unpack .../23-libgvpr2_2.38.0-16ubuntu2_amd64.deb ...\n","Unpacking libgvpr2 (2.38.0-16ubuntu2) ...\n","Selecting previously unselected package libxt6:amd64.\n","Preparing to unpack .../24-libxt6_1%3a1.1.5-1_amd64.deb ...\n","Unpacking libxt6:amd64 (1:1.1.5-1) ...\n","Selecting previously unselected package libxmu6:amd64.\n","Preparing to unpack .../25-libxmu6_2%3a1.1.2-2_amd64.deb ...\n","Unpacking libxmu6:amd64 (2:1.1.2-2) ...\n","Selecting previously unselected package libxaw7:amd64.\n","Preparing to unpack .../26-libxaw7_2%3a1.0.13-1_amd64.deb ...\n","Unpacking libxaw7:amd64 (2:1.0.13-1) ...\n","Selecting previously unselected package graphviz.\n","Preparing to unpack .../27-graphviz_2.38.0-16ubuntu2_amd64.deb ...\n","Unpacking graphviz (2.38.0-16ubuntu2) ...\n","Setting up libpathplan4 (2.38.0-16ubuntu2) ...\n","Setting up libxcb-render0:amd64 (1.12-1ubuntu1) ...\n","Setting up libjbig0:amd64 (2.1-3.1) ...\n","Setting up libdatrie1:amd64 (0.2.10-5) ...\n","Setting up libtiff5:amd64 (4.0.8-5ubuntu0.1) ...\n","Setting up libgraphite2-3:amd64 (1.3.10-2) ...\n","Setting up libpixman-1-0:amd64 (0.34.0-1) ...\n","Processing triggers for libc-bin (2.26-0ubuntu2.1) ...\n","Setting up libltdl7:amd64 (2.4.6-2) ...\n","Setting up libxcb-shm0:amd64 (1.12-1ubuntu1) ...\n","Setting up libxpm4:amd64 (1:3.5.12-1) ...\n","Setting up libxt6:amd64 (1:1.1.5-1) ...\n","Setting up libthai-data (0.1.26-3) ...\n","Setting up libcdt5 (2.38.0-16ubuntu2) ...\n"],"name":"stdout"},{"output_type":"stream","text":["Setting up fontconfig (2.11.94-0ubuntu2) ...\n","Regenerating fonts cache... done.\n","Setting up libcgraph6 (2.38.0-16ubuntu2) ...\n","Setting up libwebp6:amd64 (0.6.0-3) ...\n","Setting up libcairo2:amd64 (1.14.10-1ubuntu1) ...\n","Setting up libgvpr2 (2.38.0-16ubuntu2) ...\n","Setting up libgd3:amd64 (2.2.5-3) ...\n","Setting up libharfbuzz0b:amd64 (1.4.2-1) ...\n","Setting up libthai0:amd64 (0.1.26-3) ...\n","Setting up libxmu6:amd64 (2:1.1.2-2) ...\n","Setting up libpango-1.0-0:amd64 (1.40.12-1) ...\n","Setting up libxaw7:amd64 (2:1.0.13-1) ...\n","Setting up libpangoft2-1.0-0:amd64 (1.40.12-1) ...\n","Setting up libpangocairo-1.0-0:amd64 (1.40.12-1) ...\n","Setting up libgvc6 (2.38.0-16ubuntu2) ...\n","Setting up graphviz (2.38.0-16ubuntu2) ...\n","Processing triggers for libc-bin (2.26-0ubuntu2.1) ...\n"],"name":"stdout"}]},{"cell_type":"code","metadata":{"id":"jMsk-qOpWbRP"},"source":["from google.colab import drive\n","drive.mount('/content/drive')"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"z4hlpPlFWNEM"},"source":[""],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"qVRLZJSuWNg4"},"source":[""],"execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"DnF8yF8bNPr5"},"source":["Import ``` pandas``` , ``` numpy``` and ``` graphviz``` python libraries: the ``` xlrd``` library is a requirement for importing excel via pandas, but it's not necessary to explict the import action"]},{"cell_type":"code","metadata":{"id":"uUFWX8ZhNKOk"},"source":["import pandas as pd\n","import graphviz\n","import numpy as np"],"execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"mnM8kKfqxv8n"},"source":["# Upload file from local drive and import in dataframe"]},{"cell_type":"markdown","metadata":{"id":"F0E2PNwiK3ln"},"source":["Import xlsx file from local drives, after you downloaded it from [this link](https://bit.ly/2sdu1AF)"]},{"cell_type":"code","metadata":{"id":"mQXjST-9AN4N","colab":{"resources":{"http://localhost:8080/nbextensions/google.colab/files.js":{"data":"Ly8gQ29weXJpZ2h0IDIwMTcgR29vZ2xlIExMQwovLwovLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKLy8geW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgovLyBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKLy8KLy8gICAgICBodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKLy8KLy8gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQovLyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAovLyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KLy8gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAovLyBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KCi8qKgogKiBAZmlsZW92ZXJ2aWV3IEhlbHBlcnMgZm9yIGdvb2dsZS5jb2xhYiBQeXRob24gbW9kdWxlLgogKi8KKGZ1bmN0aW9uKHNjb3BlKSB7CmZ1bmN0aW9uIHNwYW4odGV4dCwgc3R5bGVBdHRyaWJ1dGVzID0ge30pIHsKICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpOwogIGVsZW1lbnQudGV4dENvbnRlbnQgPSB0ZXh0OwogIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHN0eWxlQXR0cmlidXRlcykpIHsKICAgIGVsZW1lbnQuc3R5bGVba2V5XSA9IHN0eWxlQXR0cmlidXRlc1trZXldOwogIH0KICByZXR1cm4gZWxlbWVudDsKfQoKLy8gTWF4IG51bWJlciBvZiBieXRlcyB3aGljaCB3aWxsIGJlIHVwbG9hZGVkIGF0IGEgdGltZS4KY29uc3QgTUFYX1BBWUxPQURfU0laRSA9IDEwMCAqIDEwMjQ7Ci8vIE1heCBhbW91bnQgb2YgdGltZSB0byBibG9jayB3YWl0aW5nIGZvciB0aGUgdXNlci4KY29uc3QgRklMRV9DSEFOR0VfVElNRU9VVF9NUyA9IDMwICogMTAwMDsKCmZ1bmN0aW9uIF91cGxvYWRGaWxlcyhpbnB1dElkLCBvdXRwdXRJZCkgewogIGNvbnN0IHN0ZXBzID0gdXBsb2FkRmlsZXNTdGVwKGlucHV0SWQsIG91dHB1dElkKTsKICBjb25zdCBvdXRwdXRFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob3V0cHV0SWQpOwogIC8vIENhY2hlIHN0ZXBzIG9uIHRoZSBvdXRwdXRFbGVtZW50IHRvIG1ha2UgaXQgYXZhaWxhYmxlIGZvciB0aGUgbmV4dCBjYWxsCiAgLy8gdG8gdXBsb2FkRmlsZXNDb250aW51ZSBmcm9tIFB5dGhvbi4KICBvdXRwdXRFbGVtZW50LnN0ZXBzID0gc3RlcHM7CgogIHJldHVybiBfdXBsb2FkRmlsZXNDb250aW51ZShvdXRwdXRJZCk7Cn0KCi8vIFRoaXMgaXMgcm91Z2hseSBhbiBhc3luYyBnZW5lcmF0b3IgKG5vdCBzdXBwb3J0ZWQgaW4gdGhlIGJyb3dzZXIgeWV0KSwKLy8gd2hlcmUgdGhlcmUgYXJlIG11bHRpcGxlIGFzeW5jaHJvbm91cyBzdGVwcyBhbmQgdGhlIFB5dGhvbiBzaWRlIGlzIGdvaW5nCi8vIHRvIHBvbGwgZm9yIGNvbXBsZXRpb24gb2YgZWFjaCBzdGVwLgovLyBUaGlzIHVzZXMgYSBQcm9taXNlIHRvIGJsb2NrIHRoZSBweXRob24gc2lkZSBvbiBjb21wbGV0aW9uIG9mIGVhY2ggc3RlcCwKLy8gdGhlbiBwYXNzZXMgdGhlIHJlc3VsdCBvZiB0aGUgcHJldmlvdXMgc3RlcCBhcyB0aGUgaW5wdXQgdG8gdGhlIG5leHQgc3RlcC4KZnVuY3Rpb24gX3VwbG9hZEZpbGVzQ29udGludWUob3V0cHV0SWQpIHsKICBjb25zdCBvdXRwdXRFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob3V0cHV0SWQpOwogIGNvbnN0IHN0ZXBzID0gb3V0cHV0RWxlbWVudC5zdGVwczsKCiAgY29uc3QgbmV4dCA9IHN0ZXBzLm5leHQob3V0cHV0RWxlbWVudC5sYXN0UHJvbWlzZVZhbHVlKTsKICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5leHQudmFsdWUucHJvbWlzZSkudGhlbigodmFsdWUpID0+IHsKICAgIC8vIENhY2hlIHRoZSBsYXN0IHByb21pc2UgdmFsdWUgdG8gbWFrZSBpdCBhdmFpbGFibGUgdG8gdGhlIG5leHQKICAgIC8vIHN0ZXAgb2YgdGhlIGdlbmVyYXRvci4KICAgIG91dHB1dEVsZW1lbnQubGFzdFByb21pc2VWYWx1ZSA9IHZhbHVlOwogICAgcmV0dXJuIG5leHQudmFsdWUucmVzcG9uc2U7CiAgfSk7Cn0KCi8qKgogKiBHZW5lcmF0b3IgZnVuY3Rpb24gd2hpY2ggaXMgY2FsbGVkIGJldHdlZW4gZWFjaCBhc3luYyBzdGVwIG9mIHRoZSB1cGxvYWQKICogcHJvY2Vzcy4KICogQHBhcmFtIHtzdHJpbmd9IGlucHV0SWQgRWxlbWVudCBJRCBvZiB0aGUgaW5wdXQgZmlsZSBwaWNrZXIgZWxlbWVudC4KICogQHBhcmFtIHtzdHJpbmd9IG91dHB1dElkIEVsZW1lbnQgSUQgb2YgdGhlIG91dHB1dCBkaXNwbGF5LgogKiBAcmV0dXJuIHshSXRlcmFibGU8IU9iamVjdD59IEl0ZXJhYmxlIG9mIG5leHQgc3RlcHMuCiAqLwpmdW5jdGlvbiogdXBsb2FkRmlsZXNTdGVwKGlucHV0SWQsIG91dHB1dElkKSB7CiAgY29uc3QgaW5wdXRFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaW5wdXRJZCk7CiAgaW5wdXRFbGVtZW50LmRpc2FibGVkID0gZmFsc2U7CgogIGNvbnN0IG91dHB1dEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChvdXRwdXRJZCk7CiAgb3V0cHV0RWxlbWVudC5pbm5lckhUTUwgPSAnJzsKCiAgY29uc3QgcGlja2VkUHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CiAgICBpbnB1dEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKGUpID0+IHsKICAgICAgcmVzb2x2ZShlLnRhcmdldC5maWxlcyk7CiAgICB9KTsKICB9KTsKCiAgY29uc3QgY2FuY2VsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7CiAgaW5wdXRFbGVtZW50LnBhcmVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoY2FuY2VsKTsKICBjYW5jZWwudGV4dENvbnRlbnQgPSAnQ2FuY2VsIHVwbG9hZCc7CiAgY29uc3QgY2FuY2VsUHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7CiAgICBjYW5jZWwub25jbGljayA9ICgpID0+IHsKICAgICAgcmVzb2x2ZShudWxsKTsKICAgIH07CiAgfSk7CgogIC8vIENhbmNlbCB1cGxvYWQgaWYgdXNlciBoYXNuJ3QgcGlja2VkIGFueXRoaW5nIGluIHRpbWVvdXQuCiAgY29uc3QgdGltZW91dFByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gewogICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgIHJlc29sdmUobnVsbCk7CiAgICB9LCBGSUxFX0NIQU5HRV9USU1FT1VUX01TKTsKICB9KTsKCiAgLy8gV2FpdCBmb3IgdGhlIHVzZXIgdG8gcGljayB0aGUgZmlsZXMuCiAgY29uc3QgZmlsZXMgPSB5aWVsZCB7CiAgICBwcm9taXNlOiBQcm9taXNlLnJhY2UoW3BpY2tlZFByb21pc2UsIHRpbWVvdXRQcm9taXNlLCBjYW5jZWxQcm9taXNlXSksCiAgICByZXNwb25zZTogewogICAgICBhY3Rpb246ICdzdGFydGluZycsCiAgICB9CiAgfTsKCiAgaWYgKCFmaWxlcykgewogICAgcmV0dXJuIHsKICAgICAgcmVzcG9uc2U6IHsKICAgICAgICBhY3Rpb246ICdjb21wbGV0ZScsCiAgICAgIH0KICAgIH07CiAgfQoKICBjYW5jZWwucmVtb3ZlKCk7CgogIC8vIERpc2FibGUgdGhlIGlucHV0IGVsZW1lbnQgc2luY2UgZnVydGhlciBwaWNrcyBhcmUgbm90IGFsbG93ZWQuCiAgaW5wdXRFbGVtZW50LmRpc2FibGVkID0gdHJ1ZTsKCiAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7CiAgICBjb25zdCBsaSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpJyk7CiAgICBsaS5hcHBlbmQoc3BhbihmaWxlLm5hbWUsIHtmb250V2VpZ2h0OiAnYm9sZCd9KSk7CiAgICBsaS5hcHBlbmQoc3BhbigKICAgICAgICBgKCR7ZmlsZS50eXBlIHx8ICduL2EnfSkgLSAke2ZpbGUuc2l6ZX0gYnl0ZXMsIGAgKwogICAgICAgIGBsYXN0IG1vZGlmaWVkOiAkewogICAgICAgICAgICBmaWxlLmxhc3RNb2RpZmllZERhdGUgPyBmaWxlLmxhc3RNb2RpZmllZERhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKCkgOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbi9hJ30gLSBgKSk7CiAgICBjb25zdCBwZXJjZW50ID0gc3BhbignMCUgZG9uZScpOwogICAgbGkuYXBwZW5kQ2hpbGQocGVyY2VudCk7CgogICAgb3V0cHV0RWxlbWVudC5hcHBlbmRDaGlsZChsaSk7CgogICAgY29uc3QgZmlsZURhdGFQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHsKICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTsKICAgICAgcmVhZGVyLm9ubG9hZCA9IChlKSA9PiB7CiAgICAgICAgcmVzb2x2ZShlLnRhcmdldC5yZXN1bHQpOwogICAgICB9OwogICAgICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoZmlsZSk7CiAgICB9KTsKICAgIC8vIFdhaXQgZm9yIHRoZSBkYXRhIHRvIGJlIHJlYWR5LgogICAgbGV0IGZpbGVEYXRhID0geWllbGQgewogICAgICBwcm9taXNlOiBmaWxlRGF0YVByb21pc2UsCiAgICAgIHJlc3BvbnNlOiB7CiAgICAgICAgYWN0aW9uOiAnY29udGludWUnLAogICAgICB9CiAgICB9OwoKICAgIC8vIFVzZSBhIGNodW5rZWQgc2VuZGluZyB0byBhdm9pZCBtZXNzYWdlIHNpemUgbGltaXRzLiBTZWUgYi82MjExNTY2MC4KICAgIGxldCBwb3NpdGlvbiA9IDA7CiAgICB3aGlsZSAocG9zaXRpb24gPCBmaWxlRGF0YS5ieXRlTGVuZ3RoKSB7CiAgICAgIGNvbnN0IGxlbmd0aCA9IE1hdGgubWluKGZpbGVEYXRhLmJ5dGVMZW5ndGggLSBwb3NpdGlvbiwgTUFYX1BBWUxPQURfU0laRSk7CiAgICAgIGNvbnN0IGNodW5rID0gbmV3IFVpbnQ4QXJyYXkoZmlsZURhdGEsIHBvc2l0aW9uLCBsZW5ndGgpOwogICAgICBwb3NpdGlvbiArPSBsZW5ndGg7CgogICAgICBjb25zdCBiYXNlNjQgPSBidG9hKFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgY2h1bmspKTsKICAgICAgeWllbGQgewogICAgICAgIHJlc3BvbnNlOiB7CiAgICAgICAgICBhY3Rpb246ICdhcHBlbmQnLAogICAgICAgICAgZmlsZTogZmlsZS5uYW1lLAogICAgICAgICAgZGF0YTogYmFzZTY0LAogICAgICAgIH0sCiAgICAgIH07CiAgICAgIHBlcmNlbnQudGV4dENvbnRlbnQgPQogICAgICAgICAgYCR7TWF0aC5yb3VuZCgocG9zaXRpb24gLyBmaWxlRGF0YS5ieXRlTGVuZ3RoKSAqIDEwMCl9JSBkb25lYDsKICAgIH0KICB9CgogIC8vIEFsbCBkb25lLgogIHlpZWxkIHsKICAgIHJlc3BvbnNlOiB7CiAgICAgIGFjdGlvbjogJ2NvbXBsZXRlJywKICAgIH0KICB9Owp9CgpzY29wZS5nb29nbGUgPSBzY29wZS5nb29nbGUgfHwge307CnNjb3BlLmdvb2dsZS5jb2xhYiA9IHNjb3BlLmdvb2dsZS5jb2xhYiB8fCB7fTsKc2NvcGUuZ29vZ2xlLmNvbGFiLl9maWxlcyA9IHsKICBfdXBsb2FkRmlsZXMsCiAgX3VwbG9hZEZpbGVzQ29udGludWUsCn07Cn0pKHNlbGYpOwo=","ok":true,"headers":[["content-type","application/javascript"]],"status":200,"status_text":""}},"base_uri":"https://localhost:8080/","height":89},"executionInfo":{"status":"ok","timestamp":1527575650223,"user_tz":-120,"elapsed":10653,"user":{"displayName":"Davide
Fedele Contalbo","photoUrl":"//lh5.googleusercontent.com/-v0RG0096I0Q/AAAAAAAAAAI/AAAAAAAATps/qIIjbrZfv_M/s50-c-k-no/photo.jpg","userId":"109102974191300831816"}},"outputId":"fbee2077-f671-44a5-fe8d-cb09128fd5c3"},"source":["from google.colab import files\n","uploaded = files.upload()\n","for fn in uploaded.keys():\n"," print('User uploaded file \"{name}\" with length {length} bytes'.format(name=fn, length=len(uploaded[fn])))\n"],"execution_count":null,"outputs":[{"output_type":"display_data","data":{"text/plain":["<IPython.core.display.HTML object>"],"text/html":["\n"," <input type=\"file\" id=\"files-7442ca2d-a261-4071-b70d-7a1e5e9dd6a8\" name=\"files[]\" multiple disabled />\n"," <output id=\"result-7442ca2d-a261-4071-b70d-7a1e5e9dd6a8\">\n"," Upload widget is only available when the cell has been executed in the\n"," current browser session. Please rerun this cell to enable.\n"," </output>\n"," <script src=\"/nbextensions/google.colab/files.js\"></script> "]},"metadata":{"tags":[]}},{"output_type":"stream","text":["Saving Enterprise_Architecture.xlsx to Enterprise_Architecture.xlsx\n","User uploaded file \"Enterprise_Architecture.xlsx\" with length 10241 bytes\n"],"name":"stdout"}]},{"cell_type":"markdown","metadata":{"id":"Ext5H-UcLXEa"},"source":["Import xlsx file in ```dfin``` dataframe from xlsx file uploaded in previous step. The ``` sheet_name``` parameter is the name of sheet we want to import, the ```header``` parameter is the row number (starting from zero) for dataframe header and ```index_col``` is the column number (starting from zero) that is the dataframe index."]},{"cell_type":"code","metadata":{"id":"BfaDmCgVHy0j","colab":{"base_uri":"https://localhost:8080/","height":483},"executionInfo":{"status":"ok","timestamp":1527575657240,"user_tz":-120,"elapsed":702,"user":{"displayName":"Davide Fedele Contalbo","photoUrl":"//lh5.googleusercontent.com/-v0RG0096I0Q/AAAAAAAAAAI/AAAAAAAATps/qIIjbrZfv_M/s50-c-k-no/photo.jpg","userId":"109102974191300831816"}},"outputId":"2b328c05-3764-4d9c-e490-cae191e787bc"},"source":["dfin = pd.read_excel(fn,sheet_name='Data Architecture', header=0,index_col=0)\n","dfin"],"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/html":["<div>\n","<style scoped>\n"," .dataframe tbody tr th:only-of-type {\n"," vertical-align: middle;\n"," }\n","\n"," .dataframe tbody tr th {\n"," vertical-align: top;\n"," }\n","\n"," .dataframe thead th {\n"," text-align: right;\n"," }\n","</style>\n","<table border=\"1\" class=\"dataframe\">\n"," <thead>\n"," <tr style=\"text-align: right;\">\n"," <th></th>\n"," <th>Data Entity</th>\n"," <th>Source</th>\n"," <th>Destination</th>\n"," <th>Integration Style</th>\n"," </tr>\n"," <tr>\n"," <th>ID Data Flow</th>\n"," <th></th>\n"," <th></th>\n"," <th></th>\n"," <th></th>\n"," </tr>\n"," </thead>\n"," <tbody>\n"," <tr>\n"," <th>FLOW1</th>\n"," <td>Entity 1</td>\n"," <td>Application A</td>\n"," <td>Application B</td>\n"," <td>Message</td>\n"," </tr>\n"," <tr>\n"," <th>FLOW2</th>\n"," <td>Entity 1</td>\n"," <td>Application A</td>\n"," <td>Application C</td>\n"," <td>Message</td>\n"," </tr>\n"," <tr>\n"," <th>FLOW3</th>\n"," <td>Entity 1</td>\n"," <td>Application A</td>\n"," <td>Application D</td>\n"," <td>Message</td>\n"," </tr>\n"," <tr>\n"," <th>FLOW4</th>\n"," <td>Entity 2</td>\n"," <td>Application A</td>\n"," <td>Application E</td>\n"," <td>Shared Database</td>\n"," </tr>\n"," <tr>\n"," <th>FLOW5</th>\n"," <td>Entity 2</td>\n"," <td>Application A</td>\n"," <td>Application B</td>\n"," <td>Shared Database</td>\n"," </tr>\n"," <tr>\n"," <th>FLOW6</th>\n"," <td>Entity 2</td>\n"," <td>Application B</td>\n"," <td>Application C</td>\n"," <td>Shared Database</td>\n"," </tr>\n"," <tr>\n"," <th>FLOW7</th>\n"," <td>Entity 3</td>\n"," <td>Application C</td>\n"," <td>Application E</td>\n"," <td>File Transfer</td>\n"," </tr>\n"," <tr>\n"," <th>FLOW8</th>\n"," <td>Entity 4</td>\n"," <td>Application B</td>\n"," <td>Application A</td>\n"," <td>Remote Procedure Invocation</td>\n"," </tr>\n"," <tr>\n"," <th>FLOW9</th>\n"," <td>Entity 4</td>\n"," <td>Application B</td>\n"," <td>Application C</td>\n"," <td>Remote Procedure Invocation</td>\n"," </tr>\n"," <tr>\n"," <th>FLOW10</th>\n"," <td>Entity 4</td>\n"," <td>Application C</td>\n"," <td>Application E</td>\n"," <td>File Transfer</td>\n"," </tr>\n"," <tr>\n"," <th>FLOW11</th>\n"," <td>Entity 5</td>\n"," <td>Application E</td>\n"," <td>Application A</td>\n"," <td>Message</td>\n"," </tr>\n"," <tr>\n"," <th>FLOW12</th>\n"," <td>Entity 5</td>\n"," <td>Application E</td>\n"," <td>Application D</td>\n"," <td>Message</td>\n"," </tr>\n"," <tr>\n"," <th>FLOW13</th>\n"," <td>Entity 4</td>\n"," <td>Application A</td>\n"," <td>Application D</td>\n"," <td>File Transfer</td>\n"," </tr>\n"," </tbody>\n","</table>\n","</div>"],"text/plain":[" Data Entity Source Destination \\\n","ID Data Flow \n","FLOW1 Entity 1 Application A Application B \n","FLOW2 Entity 1 Application A Application C \n","FLOW3 Entity 1 Application A Application D \n","FLOW4 Entity 2 Application A Application E \n","FLOW5 Entity 2 Application A Application B \n","FLOW6 Entity 2 Application B Application C \n","FLOW7 Entity 3 Application C Application E \n","FLOW8 Entity 4 Application B Application A \n","FLOW9 Entity 4 Application B Application C \n","FLOW10 Entity 4 Application C Application E \n","FLOW11 Entity 5 Application E Application A \n","FLOW12 Entity 5 Application E Application D \n","FLOW13 Entity 4 Application A Application D \n","\n"," Integration Style \n","ID Data Flow \n","FLOW1 Message \n","FLOW2 Message \n","FLOW3 Message \n","FLOW4 Shared Database \n","FLOW5 Shared Database \n","FLOW6 Shared Database \n","FLOW7 File Transfer \n","FLOW8 Remote Procedure Invocation \n","FLOW9 Remote Procedure Invocation \n","FLOW10 File Transfer \n","FLOW11 Message \n","FLOW12 Message \n","FLOW13 File Transfer "]},"metadata":{"tags":[]},"execution_count":4}]},{"cell_type":"markdown","metadata":{"id":"j8-cPFOkx61W"},"source":["# Manipulate dataframe and prepare data for Graphviz"]},{"cell_type":"markdown","metadata":{"id":"hEWz1ePnARx8"},"source":["Define colormap for Integration Styles and import it in a ```colormap``` dataframe"]},{"cell_type":"code","metadata":{"id":"BPz4RWOgKeJI","colab":{"base_uri":"https://localhost:8080/","height":173},"executionInfo":{"status":"ok","timestamp":1527575663934,"user_tz":-120,"elapsed":730,"user":{"displayName":"Davide Fedele Contalbo","photoUrl":"//lh5.googleusercontent.com/-v0RG0096I0Q/AAAAAAAAAAI/AAAAAAAATps/qIIjbrZfv_M/s50-c-k-no/photo.jpg","userId":"109102974191300831816"}},"outputId":"4d5e2ce9-c2aa-4965-dfbf-4bb01816614d"},"source":["d = {'Integration Style': ['Message', 'Shared Database','File Transfer','Remote Procedure Invocation']\n"," ,'Integration Style Color': ['navyblue', 'darkorange','black','grey']}\n","colormap = pd.DataFrame(data=d)\n","colormap"],"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/html":["<div>\n","<style
scoped>\n"," .dataframe tbody tr th:only-of-type {\n"," vertical-align: middle;\n"," }\n","\n"," .dataframe tbody tr th {\n"," vertical-align: top;\n"," }\n","\n"," .dataframe thead th {\n"," text-align: right;\n"," }\n","</style>\n","<table border=\"1\" class=\"dataframe\">\n"," <thead>\n"," <tr style=\"text-align: right;\">\n"," <th></th>\n"," <th>Integration Style</th>\n"," <th>Integration Style Color</th>\n"," </tr>\n"," </thead>\n"," <tbody>\n"," <tr>\n"," <th>0</th>\n"," <td>Message</td>\n"," <td>navyblue</td>\n"," </tr>\n"," <tr>\n"," <th>1</th>\n"," <td>Shared Database</td>\n"," <td>darkorange</td>\n"," </tr>\n"," <tr>\n"," <th>2</th>\n"," <td>File Transfer</td>\n"," <td>black</td>\n"," </tr>\n"," <tr>\n"," <th>3</th>\n"," <td>Remote Procedure Invocation</td>\n"," <td>grey</td>\n"," </tr>\n"," </tbody>\n","</table>\n","</div>"],"text/plain":[" Integration Style Integration Style Color\n","0 Message navyblue\n","1 Shared Database darkorange\n","2 File Transfer black\n","3 Remote Procedure Invocation grey"]},"metadata":{"tags":[]},"execution_count":5}]},{"cell_type":"markdown","metadata":{"id":"1Rg8WDKJKvys"},"source":["Create an array ```np_tmp``` where columns are Source, Destination, Integration Style Color, Data Entity and Integration Style Color is obtained after the mapping between ```colormap``` and ```Integration Style``` of ```dfin``` dataframe.\n","```df_gr_tmp``` is in the code only for simplification of ```np_tmp``` visualization \n","\n","\n","\n"]},{"cell_type":"code","metadata":{"id":"ijXkjWWPKuB4","colab":{"base_uri":"https://localhost:8080/","height":452},"executionInfo":{"status":"ok","timestamp":1527575668780,"user_tz":-120,"elapsed":627,"user":{"displayName":"Davide Fedele Contalbo","photoUrl":"//lh5.googleusercontent.com/-v0RG0096I0Q/AAAAAAAAAAI/AAAAAAAATps/qIIjbrZfv_M/s50-c-k-no/photo.jpg","userId":"109102974191300831816"}},"outputId":"10b54a0f-a7a5-48c6-95a2-dfd344ea12d8"},"source":["np_tmp = []\n","for i in range(0,len(dfin.index)):\n"," colormap_i = colormap.loc[colormap['Integration Style'] == dfin.iloc[i]['Integration Style']].values[0][1]\n"," np_tmp.append([dfin.iloc[i]['Source'],dfin.iloc[i]['Destination'],colormap_i,dfin.iloc[i]['Data Entity']])\n","df_gr_tmp = pd.DataFrame(np_tmp)\n","df_gr_tmp.columns = ['Source','Destination','Integration Style Color','Data Entity']\n","df_gr_tmp "],"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/html":["<div>\n","<style scoped>\n"," .dataframe tbody tr th:only-of-type {\n"," vertical-align: middle;\n"," }\n","\n"," .dataframe tbody tr th {\n"," vertical-align: top;\n"," }\n","\n"," .dataframe thead th {\n"," text-align: right;\n"," }\n","</style>\n","<table border=\"1\" class=\"dataframe\">\n"," <thead>\n"," <tr style=\"text-align: right;\">\n"," <th></th>\n"," <th>Source</th>\n"," <th>Destination</th>\n"," <th>Integration Style Color</th>\n"," <th>Data Entity</th>\n"," </tr>\n"," </thead>\n"," <tbody>\n"," <tr>\n"," <th>0</th>\n"," <td>Application A</td>\n"," <td>Application B</td>\n"," <td>navyblue</td>\n"," <td>Entity 1</td>\n"," </tr>\n"," <tr>\n"," <th>1</th>\n"," <td>Application A</td>\n"," <td>Application C</td>\n"," <td>navyblue</td>\n"," <td>Entity 1</td>\n"," </tr>\n"," <tr>\n"," <th>2</th>\n"," <td>Application A</td>\n"," <td>Application D</td>\n"," <td>navyblue</td>\n"," <td>Entity 1</td>\n"," </tr>\n"," <tr>\n"," <th>3</th>\n"," <td>Application A</td>\n"," <td>Application E</td>\n"," <td>darkorange</td>\n"," <td>Entity 2</td>\n"," </tr>\n"," <tr>\n"," <th>4</th>\n"," <td>Application A</td>\n"," <td>Application B</td>\n"," <td>darkorange</td>\n"," <td>Entity 2</td>\n"," </tr>\n"," <tr>\n"," <th>5</th>\n"," <td>Application B</td>\n"," <td>Application C</td>\n"," <td>darkorange</td>\n"," <td>Entity 2</td>\n"," </tr>\n"," <tr>\n"," <th>6</th>\n"," <td>Application C</td>\n"," <td>Application E</td>\n"," <td>black</td>\n"," <td>Entity 3</td>\n"," </tr>\n"," <tr>\n"," <th>7</th>\n"," <td>Application B</td>\n"," <td>Application A</td>\n"," <td>grey</td>\n"," <td>Entity 4</td>\n"," </tr>\n"," <tr>\n"," <th>8</th>\n"," <td>Application B</td>\n"," <td>Application C</td>\n"," <td>grey</td>\n"," <td>Entity 4</td>\n"," </tr>\n"," <tr>\n"," <th>9</th>\n"," <td>Application C</td>\n"," <td>Application E</td>\n"," <td>black</td>\n"," <td>Entity 4</td>\n"," </tr>\n"," <tr>\n"," <th>10</th>\n"," <td>Application E</td>\n"," <td>Application A</td>\n"," <td>navyblue</td>\n"," <td>Entity 5</td>\n"," </tr>\n"," <tr>\n"," <th>11</th>\n"," <td>Application E</td>\n"," <td>Application D</td>\n"," <td>navyblue</td>\n"," <td>Entity 5</td>\n"," </tr>\n"," <tr>\n"," <th>12</th>\n"," <td>Application A</td>\n"," <td>Application D</td>\n"," <td>black</td>\n"," <td>Entity 4</td>\n"," </tr>\n"," </tbody>\n","</table>\n","</div>"],"text/plain":[" Source Destination Integration Style Color Data Entity\n","0 Application A Application B navyblue Entity 1\n","1 Application A Application C navyblue Entity 1\n","2 Application A Application D navyblue Entity 1\n","3 Application A Application E darkorange Entity 2\n","4 Application A Application B darkorange Entity 2\n","5 Application B Application C darkorange Entity 2\n","6 Application C Application E black Entity 3\n","7 Application B Application A grey Entity 4\n","8 Application B Application C grey Entity 4\n","9 Application C Application E black Entity 4\n","10 Application E Application A navyblue Entity 5\n","11 Application E Application D navyblue Entity 5\n","12 Application A Application D black Entity 4"]},"metadata":{"tags":[]},"execution_count":6}]},{"cell_type":"markdown","metadata":{"id":"If7ZnhTwaaQq"},"source":["Process ```np_tmp``` in order to merge more rows with follow logic: merge two or more rows if they have the same source and destionation. The result of this operation is a new array ```np_pro```.\n","The ```Integration Style Color``` is the concatenation of ```Integration Style Color``` values with character ```:``` and the ```Data Entities``` is the concatenation of ```Data Entity``` with charater ```\\n```. The charater ```:``` and ```\\n``` are useful for graphviz interpreter.\n","The final step is to create a ```df_graph``` dataframe from ```np_pro``` dataframe"]},{"cell_type":"code","metadata":{"id":"LN4bX5DrGlAQ","colab":{"base_uri":"https://localhost:8080/","height":328},"executionInfo":{"status":"ok","timestamp":1527575690380,"user_tz":-120,"elapsed":663,"user":{"displayName":"Davide Fedele Contalbo","photoUrl":"//lh5.googleusercontent.com/-v0RG0096I0Q/AAAAAAAAAAI/AAAAAAAATps/qIIjbrZfv_M/s50-c-k-no/photo.jpg","userId":"109102974191300831816"}},"outputId":"90e9d311-3807-413b-9d1d-e3f0b5f7cb35"},"source":["np_pro = []\n","append = 0\n","np_pro.append([np_tmp[0][0],np_tmp[0][1],np_tmp[0][2],np_tmp[0][3]])\n","for i in range(1,len(np_tmp)): \n"," for j in range(0,len(np_pro)):\n"," append = 0\n"," if np_tmp[i][0] == np_pro[j][0] and np_tmp[i][1] == np_pro[j][1]:\n"," np_pro[j][3] = np_pro[j][3]
+ '\\n' + np_tmp[i][3]\n"," if np_tmp[i][2] not in np_pro[j][2]: \n"," np_pro[j][2] = np_pro[j][2] + ':' + np_tmp[i][2]\n"," append = 1\n"," break\n"," if append == 0:\n"," np_pro.append([np_tmp[i][0],np_tmp[i][1],np_tmp[i][2],np_tmp[i][3]])\n"," else:\n"," continue\n","df_graph = pd.DataFrame(np_pro)\n","df_graph.columns = ['Source','Destination','Integration Style Color','Data Entities']\n","df_graph"],"execution_count":null,"outputs":[{"output_type":"execute_result","data":{"text/html":["<div>\n","<style scoped>\n"," .dataframe tbody tr th:only-of-type {\n"," vertical-align: middle;\n"," }\n","\n"," .dataframe tbody tr th {\n"," vertical-align: top;\n"," }\n","\n"," .dataframe thead th {\n"," text-align: right;\n"," }\n","</style>\n","<table border=\"1\" class=\"dataframe\">\n"," <thead>\n"," <tr style=\"text-align: right;\">\n"," <th></th>\n"," <th>Source</th>\n"," <th>Destination</th>\n"," <th>Integration Style Color</th>\n"," <th>Data Entities</th>\n"," </tr>\n"," </thead>\n"," <tbody>\n"," <tr>\n"," <th>0</th>\n"," <td>Application A</td>\n"," <td>Application B</td>\n"," <td>navyblue:darkorange</td>\n"," <td>Entity 1\\nEntity 2</td>\n"," </tr>\n"," <tr>\n"," <th>1</th>\n"," <td>Application A</td>\n"," <td>Application C</td>\n"," <td>navyblue</td>\n"," <td>Entity 1</td>\n"," </tr>\n"," <tr>\n"," <th>2</th>\n"," <td>Application A</td>\n"," <td>Application D</td>\n"," <td>navyblue:black</td>\n"," <td>Entity 1\\nEntity 4</td>\n"," </tr>\n"," <tr>\n"," <th>3</th>\n"," <td>Application A</td>\n"," <td>Application E</td>\n"," <td>darkorange</td>\n"," <td>Entity 2</td>\n"," </tr>\n"," <tr>\n"," <th>4</th>\n"," <td>Application B</td>\n"," <td>Application C</td>\n"," <td>darkorange:grey</td>\n"," <td>Entity 2\\nEntity 4</td>\n"," </tr>\n"," <tr>\n"," <th>5</th>\n"," <td>Application C</td>\n"," <td>Application E</td>\n"," <td>black</td>\n"," <td>Entity 3\\nEntity 4</td>\n"," </tr>\n"," <tr>\n"," <th>6</th>\n"," <td>Application B</td>\n"," <td>Application A</td>\n"," <td>grey</td>\n"," <td>Entity 4</td>\n"," </tr>\n"," <tr>\n"," <th>7</th>\n"," <td>Application E</td>\n"," <td>Application A</td>\n"," <td>navyblue</td>\n"," <td>Entity 5</td>\n"," </tr>\n"," <tr>\n"," <th>8</th>\n"," <td>Application E</td>\n"," <td>Application D</td>\n"," <td>navyblue</td>\n"," <td>Entity 5</td>\n"," </tr>\n"," </tbody>\n","</table>\n","</div>"],"text/plain":[" Source Destination Integration Style Color Data Entities\n","0 Application A Application B navyblue:darkorange Entity 1\\nEntity 2\n","1 Application A Application C navyblue Entity 1\n","2 Application A Application D navyblue:black Entity 1\\nEntity 4\n","3 Application A Application E darkorange Entity 2\n","4 Application B Application C darkorange:grey Entity 2\\nEntity 4\n","5 Application C Application E black Entity 3\\nEntity 4\n","6 Application B Application A grey Entity 4\n","7 Application E Application A navyblue Entity 5\n","8 Application E Application D navyblue Entity 5"]},"metadata":{"tags":[]},"execution_count":7}]},{"cell_type":"markdown","metadata":{"id":"SmpKOP_z2xkK"},"source":[""]},{"cell_type":"code","metadata":{"id":"GhKQqnbm2yP0"},"source":[""],"execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"h9x7GSREyNWS"},"source":["# Create Graph function and plot graph"]},{"cell_type":"markdown","metadata":{"id":"3OsAr2YzzoeN"},"source":["Define a ```makegraph``` function: it receives ```df_graph``` and ```colormap``` dataframe and returns one graph contained data integration and one subgraph for legend.\n","The graph shows for each application one block and the links between the application colored agreed by the predefined colormap. The text on top the link is the list of exchanged data entities."]},{"cell_type":"code","metadata":{"id":"NViqCTW7dOTa"},"source":["def makegraph(df_graph,colormap):\n"," graph = graphviz.Digraph(name='Enterprise Architecture',graph_attr={'labelloc':'t','label':'Enterprise Architecture','fontsize':'24.0','rankdir':'TB'},node_attr={'shape': 'box'}) \n"," for i in range(0,len(df_graph.index)):\n"," appsource = df_graph.iloc[i]['Source']\n"," appdest = df_graph.iloc[i]['Destination']\n"," colorstyle = df_graph.iloc[i]['Integration Style Color']\n"," entities = df_graph.iloc[i]['Data Entities']\n"," graph.node(appsource,fixedsize='true',width='2.5')\n"," graph.node(appdest,fixedsize='true',width='2.5')\n"," graph.edge(appsource,appdest,color=colorstyle,label=entities) \n"," legend = graphviz.Digraph(name='cluster_0',node_attr={'shape': 'box'},graph_attr={'label':'Legend','fontsize':'12.0'})\n"," for c in range(0,len(colormap)):\n"," namesorg = \"Source\" + str(c)\n"," namedest = \"Dest\" + str(c)\n"," legend.node(namesorg,fontsize='10',fixedsize='true',width='0.6',height='0.3')\n"," legend.node(namedest,fontsize='10',fixedsize='true',width='0.6',height='0.3')\n"," colorstyle = colormap.iloc[c]['Integration Style Color']\n"," intstyle = colormap.iloc[c]['Integration Style']\n"," legend.edge(namesorg,namedest,color=colorstyle,label=intstyle,fontsize='10')\n"," graph.subgraph(legend)\n"," return graph "],"execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"rNwd2hlN0xHu"},"source":["Launch ```makegraph``` function and plot the graph"]},{"cell_type":"code","metadata":{"id":"QSy93E55fhKJ","colab":{"base_uri":"https://localhost:8080/","height":189},"executionInfo":{"status":"error","timestamp":1610610942889,"user_tz":-420,"elapsed":882,"user":{"displayName":"Ben Maneewatana","photoUrl":"","userId":"16633226559348894748"}},"outputId":"73c26dcc-e419-4550-d9f2-b5272dce47d3"},"source":["graph = makegraph(df_graph,colormap)\n","graph"],"execution_count":2,"outputs":[{"output_type":"error","ename":"NameError","evalue":"ignored","traceback":["\u001b[0;31m\u001b[0m","\u001b[0;31mNameError\u001b[0mTraceback (most recent call last)","\u001b[0;32m<ipython-input-2-7e09e5841e9b>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mgraph\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmakegraph\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdf_graph\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0mcolormap\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 2\u001b[0m \u001b[0mgraph\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n","\u001b[0;31mNameError\u001b[0m: name 'makegraph' is not defined"]}]}]}

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Continue navegando