AMITT/HTML_GENERATING_CODE/.ipynb_checkpoints/AMITT_create_incident_visualisations-checkpoint.ipynb
2021-03-22 07:46:18 -07:00

989 строки
87 KiB
Plaintext
Исходник Ответственный История

Этот файл содержит неоднозначные символы Юникода

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Create AMITT incident visualisations\n",
"\n",
"Many thanks to https://python-graph-gallery.com/91-customize-seaborn-heatmap/"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<matplotlib.axes._subplots.AxesSubplot at 0x7fb2e18c9880>"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"import seaborn as sns\n",
"import pandas as pd\n",
"import numpy as np\n",
"import generate_amitt_ttps\n",
"\n",
"# Check that heatmap works\n",
"df = pd.DataFrame(np.random.random((10,12)), columns=[\"a\",\"b\",\"c\",\"d\",\"e\",\"f\",\"g\",\"h\",\"i\",\"j\",\"k\",\"l\"])\n",
"sns.heatmap(df, annot=True, annot_kws={\"size\": 7})"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[ 5, 0, 8, 11, 1, 12, 2, 3, 1, 4, 2, 0],\n",
" [ 2, 0, 1, 1, 1, 4, 2, 2, 1, 0, 0, 0],\n",
" [ 0, 0, 1, 0, 3, 4, 10, 0, 2, 0, 0, 0],\n",
" [ 0, 0, 0, 0, 0, 1, 10, 0, 2, 0, 0, 0],\n",
" [ 0, 0, 0, 0, 0, 2, 2, 1, 1, 0, 0, 0],\n",
" [ 0, 0, 0, 1, 0, 2, 3, 1, 5, 0, 0, 0],\n",
" [ 0, 0, 0, 0, 0, 4, 3, 1, 14, 0, 0, 0],\n",
" [ 0, 0, 0, 0, 0, 0, 3, 12, 15, 0, 0, 0],\n",
" [ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0],\n",
" [ 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0]])"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAVoAAAD4CAYAAACt8i4nAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO3deZhU1bnv8e8LNDON4IBIO0bUxOGgIhdEkRPUC8QADrlGTWISI4/mJKLROJ5IMMdEPUaDIeZeYpwNHiNyxPFIHKMBEREVBJUoYsusMopAd7/3j6qWVru7dnWtVdQufp88+6GquutXK5uq182utddr7o6IiMTTalsPQESk3KnQiohEpkIrIhKZCq2ISGQqtCIikbWJ/QJX73lGlGkNY5c+EyOW1/f8lyi5AHuc0TVK7n7jX4uSu/D6YVFyAY7+9xej5PasiLOPZ697N0ouwIiuB0bJfWnT0ii5cz58J0ouQM3mD6zQjC2r3klccyp22qfg10tCR7QiIpFFP6IVESmqutptPYIvUaEVkfJSW7OtR/AlKrQiUlbc67b1EL5EhVZEykudCq2ISFw6ohURiUxfhomIRJbGI1ozOwAYCfQCHFgCTHX3+SEHskf/r3LMhaew6q0PmPfQdBbPCBPfsWMHJvz+N2zevJlnn5vOpElTguS26bkzu449l9qP17L53Q/4cOJfC860brtQcfQorH1HNt33O9oMGE6bQ45i05Sb8RXVBefvsWcV5104msrKLoz+/gUF51Wv3sAt099m/aYarh/VlysfnQNAnTvjhvWhdavC54IfM/Rojjp2AN133IH7bp/Ci8++VHAmQNW+VYz44Ugqu1fy6vNzeOzux4Lkht7HDbXt0I4L7xvHQzfex9ynZgfLjbWPY332cvESnHXQ7AULZnYJcC9gwEzgpeztSWZ2adCRuLPlk020blfBuqUfBYs98cThPPDAI5xz7sV884Tjg+W23bsX6595iaWX/Y62++4RJNM/XsHmqRM/u18z/VFq33w5SDbA4vequei8K4PlVe3QiV8O6/PZ/auG9+Gq4X3o0r6Cles/DfIazz7+d66+6Dp+ef6vOX7E14NkAlQvrObmy//Atedew76H9A6WG3ofN3T8OSN5+ZHpwXNj7eNYn72c6uqSb0WS64j2LOBAd9/S8EEzuwGYB1zT2JPMbDQwGmBk934c0XnfnANZPPNNFr94HZ12quTYX3yHB8fcnGT8OVX16sncuQsAqK0Nd+5m0xv/ZKdzT6Vy+CDWPPhUsNy0e/fDdWypqWPXyg5Bc886/0zuuz3sEVG/4/pxyrnf4pE7Hg6aG8MBAw9m2cJq2rSriPYaofdxrM9eTiV46iDXJbh1wG6NPN4z+7NGuftEd+/r7n2TFNnskwDYuGYDrduGezNVf7CUql49AWjVKtwVx11PPo6VN93D4u9dRufBRwTLTbOFK9dy58x3uOTYg4Lm/vSKc/jHUzN48/W3gubOnDaTi0/6OceMGhw0N4b9BhzI3of25ogRR3HUaUMwC3uJfox9HOuzl1NdbfItBzO71cxWmNncRn52kZm5me2UKyfXEe35wJNm9jbwfvaxPYB9gZ/kHGUe9h/al30GHUL7yk7MuuOJYLlTpjzKTeOvZtiwITz8yLRguRuee5mdzjuD2m8OZkv18jChHTrTdsiptNp1LyqOGomv+5jW+x1Gq516sfm5KfiK93NnNKNbt65c8osxHHjIAfzkgh8x4cZbCspbvXEzE55bwIIVa/jT9Lf4r9mLGLjPLlz7t7mcfWRvenQp/Kj21LNOpt+gvnSu7MTue1cx+c4HC84EOKj/wRw5bAAVbSuY9fSsIJkQfh/Xm3r9vQD0P+UY1n+0jpAtqGLt41ifvZzCHtHeDkwA7mz4oJntDhwHLE4SYrn+wsysFdCPzJdhBlQDL7l7on8LaPWurbR611ZavWsrrd61VYjVuzbNnZa45rQ76Licr2dmewEPu/tBDR67H/gV8CDQ191XNZeRc9aBZ65nm5Hr90RESkIeX3I1/D4pa6K7T2zq97PPGQF84O6vJj2Fo3m0IlJWEv5jO/u7PhFotrA2ZGYdgSuAvKZRqNCKSHmJO+vgK8DeQP3RbBUw28z6ufuypp6kQisi5SXi/Fh3fx3Ypf6+mS0iwTladVgQkfLidcm3HMxsEjAd2N/Mqs3srJYMSUe0IlJearfk/p2E3P20HD/fK0mOCq2IlJftcT3aKZsTzectGceuei9e+Ph40TH87Ffp+rsDWLplzbYeQt7+tOSFbT2E8lKCl+DqiFZEysv2eEQrIlJUKrQiInF5wC/DQlGhFZHyonO0IiKR6dSBiEhkOqIVEYlMR7QiIpHpiLZpaezEGavjadpyIX0dWmPlxtrHMd/HsbK3VRdcalLWBbc5ZvaDkANJYyfOWB1P05YL6evQGis31j6O+T6Olb3NuuAGXFQmlEJW7xrX1A/MbLSZzTKzWSs/aXKJxkbF6MT5fvUSoMidOLcj9R1a165aHe01YnTBjZkbWsz3cazsbfbZK8F2480WWjN7rYntdaBHU89r2AV35467Jh5MWXXi3I6ksUNrzNwYYr6PY2Vvs89eCo9oewDfA77ZyPZhyIHUd+IccsJgTv7eyGC5U6Y8yoknDmfC738TvBNnt25dueaGKz/reLq95k69/l7+etUdvDT1eZ6f9GSUDq2h3xexcmPt45jv41jZMcfcrBI8om22C66Z/Rm4zd2fb+Rnf3H303O9QN+eR0fpghurE2ePTjtEyU2jWN1ZIV6H1liWfvpRtOzlG+KdckmbEF1wNz7w68Q1p8NJl4f951cTmp114O5NriaepMiKiBRdCc46KJnpXSIiQQQ8dRWKCq2IlBddGSYiElkJFlrNdxKR8hK2C+6tZrbCzOY2eOw/zWxBdqrrFDPL+Q26Cq2IlJfa2uRbbrcDQ7/w2DTgIHc/BHgLuCxXSPRTB7GmYaVRrGk8w3Y9NEpuTE8ObRcld8d75kfJ7bPjPlFyQdO7ggt46sDdnzOzvb7w2BMN7s4ATsmVoyNaESkveVyw0HC5gOw2Os9X+yHwWK5f0pdhIlJe8ri01t0nAhNb8jJmdgVQA9yT63dVaEWkrHhd/Hm0ZnYmcAIwxBNcc65CKyLlJfL0LjMbClwCHOPunyR5jgqtiJSXgEsymtkkYDCwk5lVA2PJzDJoB0zLrlQ3w93PaS5HhVZEykvYWQenNfLwn/PNUaEVkfJSgleGqdCKSHnRojIiIpGl8YjWzA4AegEvuvv6Bo8PdffHQw0kjZ0409bxtGrfKkb8cCSV3St59fk5PHZ3znnWiYXugms796T9CadjHTrxyc1XUdH/67Q5oA+0qWDjneNh86cF5cfax2ns5pzGz16zijC9K1+5eoadBzwI/BSYa2YNe378OuRA0tiJM20dT6sXVnPz5X/g2nOvYd9DegfLhfBdcH3lUjbe9tvP7lccNpCNt9/AlpeeoeLwowrOj7WP09jNOY2fvWaFXesgiFyX4J4NHO7uo8hMcfiFmY3J/qzJFhANL2urq9uQaCBl14mzADHH3O+4flw7+Tpee+HVYJnF6IJbf9qt7sMVtOq+c8F5sd8XaermXG6fPa+rS7wVS65C27r+dIG7LyJTbIeZ2Q00U2gbdsFt1apTooGUXSfOAsQc88xpM7n4pJ9zzKjBwTJjd8FtqFX3Xaj7aGXBOTH3cdq6OZfdZ6/Ok29Fkusc7TIz6+PucwDcfb2ZnQDcChwcciBTpjzKTeOvZtiwIcE7ccbIhUzH00t+MeazjqcTbrwlSG6sMR/U/2COHDaAirYVzHp6VrDcqdffC0D/U45h/UfrgnTBtU6VtDv5B7Tac1/afeM0al55gfbfHYO1bcvGu35fcH6sfVzfXbdzZSd237uKyXc+GCQ35vs4jZ+9ZhWxjXhSubrgVgE17r6skZ8NdPcXcr1Am7a9Su/MdDNidsFN2zKJVa06RskFuOZf43SVTeMyiVpKdKsQXXA3XHVG4prT6cp7SqILbnUzP8tZZEVEiq6m9L6L0TxaESkvJXjqQIVWRMpLCc6jVaEVkbJSzGlbSanQikh50RGtiEhkKrSlL40dSR9b9kqU3JhT3a6hZ7Rs2c6V4BWgKrQiUlaK0TMsXyq0IlJeVGhFRCLTrAMRkchK8Ig2HctZiYgkFXD1LjO71cxWmNncBo91N7NpZvZ29s9uuXJUaEWkrHhtXeItgduBoV947FLgSXfvDTyZvd8sFVoRKS8Bj2jd/Tngi0vNjQTuyN6+AxiVK0eFVkTKitd54q1hN5jsNjrBS/Rw96UA2T93yfWEkvkyLG0N4tQsb6sYTSrVnPHz9H7LQx5fhrn7RGBivMFk5DyiNbN+ZnZE9vbXzOxnZjY89EDS1iBOzfK2itGkUs0ZP0/vtzzU5bG1zHIz6wmQ/XNFrifk6oI7FrgJ+KOZ/QaYAHQGLjWzK5p5Xtk3Z1SzvOJSc0a935LymrrEWwtNBc7M3j6TTKfwZuU6oj0FGAgMAv4NGOXuVwH/Gzi1qSdtD80Z1Sxv21BzRr3fcgp4RGtmk4DpwP5mVm1mZwHXAMeZ2dvAcdn7zefk6Bn2irsf+sXb2ftz3L1PrhdI2jOsY8cO3DT+aj79dBMv/GNm0PNEacqNmZ1vbtJFZeqbVB49eACT7pqcqEnlG6OaX1SmvjljmwMPZ8tzj1H34XJa9z54a3PGJs7RJu0Zlu++SNoz7NSzTuaE/zOMN+bM5615CxM1Z0zSM2x7eL9BmJ5hH39rcOKTtN3++kxReoblKrQvAv/q7p+YWSv3TI8IM+sKPO3uh+V6gbQ1Z5StYq7elavQtpSaM6ZbkEJ7ch6FdnJxCm2uWQeD3H0TQH2Rzapg6zkKEZGSkbrVu+qLbCOPrwJWRRmRiEghSm9NmdKZRysiEoLXbOsRfJkKrYiUlRLsNq5CKyJlRoVWRCQuHdGKiESmQiup0rN992jZQx5vdEJLwWLN/V366RdXypNS5bVFmRqbFxVaESkrOqIVEYnM63REKyISlY5oRUQic9cRrYhIVDqiFRGJrE6zDkRE4tKXYSIikZVFoTWzO939e6EHkrZOnOpKulWszq8xs2N07o2Zq/dbcs30MthmcjVnnPqF7SHgpPr7IQeStk6c6kq6VazOrzGzY3TujZmr91tyXmeJt2LJ1TGtClgL3AD8Nruta3C7UeqCW5rZaev8WqzsNND7LTl3S7wVS65C2xd4GbgCWOPuzwAb3f1Zd3+2qSepC25pZqet82sxstNC77fkamst8ZaLmV1gZvPMbK6ZTTKz9i0ZU7PNGRu8WBVwI7AcGOHueyR9AXXBLZ3sUur8mlS+2UkXf2lJ595Yucs3rM75O9vD+w3CNGd884Bhic/S7r/gsSZfz8x6Ac8DX3P3jWZ2H/Cou9+e75gSFdoGL/wNYKC7X570OeqCm14xO7/GksZVtpIU2u1FiEK7YL/hiWvOAW89mqvQzgD+hcwp1P8GbnL3J/IdU17H8+7+SD5FVkSk2NyTbw2/T8puo7fm+AfA9cBiYCmZ06d5F1nQPFoRKTP5zCZw94nAxMZ+ZmbdgJHA3sBq4K9m9h13vzvfMRXvDLWISBHU1rVKvOVwLPCuu6909y3AA8CRLRmTjmhFpKwEvGBhMdDfzDoCG4EhwKyWBKnQikhZqQs0P9bdXzSz+4HZQA3wCk2cZshFhVZEykrICxHcfSwwttAcFVoRKSuluNaBCm0RxerQmsZ5mD0rukbJjTWP9seVfaLkAozd8Ey07O1RqFMHIanQikhZSTCboOhUaEWkrJTgmQMVWhEpLzp1ICISmbrgiohEVoJNcFVoRaS8ODqiFRGJqkanDkRE4kr9Ea2ZHQX0A+a2dF3GpqStE2fMDp9p66Qaswtu1b5VjPjhSCq7V/Lq83N47O7HguRG64Lb/6scc+EprHrrA+Y9NJ3FM+YHyVUX3ORK8Rxtri64MxvcPhuYAHQBxprZpSEHkrZOnDE7fKatk2rMLrjVC6u5+fI/cO2517DvIb2D5cbax7iz5ZNNtG5Xwbql4a5SUxfc5BxLvBVLrksoKhrcHg0c5+7jgOOBM5p6krrglqa0dsHtd1w/rp18Ha+98Grw7NAWz3yTe8+8jqevmcSgn50cLFddcJOry2MrllyFtpWZdTOzHcn0F1sJ4O4byCwb1ih1wS1Nae2CO3PaTC4+6eccM2pw8OzgsiuabFyzgdZtK3L8cnLqgptcLZZ4K5Zc52i7kmk3boCb2a7uvszMOmcfC2bKlEe5afzVDBs2hIcfmbbd5sLWTqoHHnIAP7ngR8E6tMYa86lnnUy/QX3pXNmJ3feuCtoF96D+B3PksAFUtK1g1tMtWnO5UbH28f5D+7LPoENoX9mJWXeE+xoj5vstjZ+R5uTRyaZo8uqC+9mTMiuO93D3d3P9rrrgbpW21btidsGNtXrX7HU535ItEnX1rqXPRMtOmxBdcB/c9fTENWfksr8UpSy3aHqXu38CxHlHi4gUoBSP7DSPVkTKSilO71KhFZGyUmeld5JWhVZEykopTrZMx7wkEZGE6iz5louZ7WBm95vZAjObb2YDWjImHdGKSFmpCzvzdDzwuLufYmZtgY4tCVGhLaK0NVE8ol3PaNnVdZ9Ey47hooe+Fy17bN9nomVvj0LNOjCzSmAQ8H0Ad98MbG5Jlk4diEhZyefUQcPlArLb6AZR+wArgdvM7BUzu8XMkl3q+gUqtCJSVvJZ66DhcgHZbWKDqDbAYcAf3f1QYAPQosW0VGhFpKzUWvIth2qg2t1fzN6/n0zhzZsKrYiUlVCrd7n7MuB9M9s/+9AQ4I2WjElfholIWQl8ZdhPgXuyMw7eAX7QkhAVWhEpKyFbhrn7HKBvoTkqtCJSVrTWgYhIZKV4Ca4KrYiUlVJc+LvZQmtm/wuY7+5rzawDmTlkh5H55u3X7r4m1EDS1olTXUk/r22Hdlx43zgeuvE+5j41O1huWrrgVi9fxZ8mP8G6TzZyw0VnAfDAk9N56NmZ3HbVmILz9X5LrhRPHeSa3nUrUH+t5HgyrW2uzT52W8iBpK0Tp7qSft7x54zk5UemB82E9HTBreqxE+N+fPpn96uXf8jq9RvoVtk5SL7eb8mlsjmju9c3Yezr7ue7+/PZTrhN9jlRF9zSzI6Ve8DAg1m2sJq1q+Ks5ZCmLrgAdXV13PnQU3x3+OBgmXq/Jed5bMWSq9DONbP6eWOvmllfADPbD9jS1JPUBbc0s2Pl7jfgQPY+tDdHjDiKo04bggVeeDlVXXDJHM1+vHY9N9z9IG+9t4S/z55XeKbeb4mFXCYxlFxfhv0IGG9m/w6sAqab2fvA+9mfBZO2TpzqSrrV1OvvBaD/Kcew/qN1tKThZ1PS0gV39boN/H7SwyxYVM0TM17hP3+WOT5Z/uFqjj7swILHq/dbcqU46yBRF1wz60LmVEEbMtf+Lk/6AuqCm15n7zYwWnasZRJjdcF959kbouQCdOr7w2jZaROiC+7Ve56RuOZc8d49pdMF193XAek4QSYi27VSnHWgebQiUlZK8Z/QKrQiUlZ0RCsiElmNld4xrQqtiJSV0iuzKrQiUmZ06kBS5U9LXoiWPWzXQ6PkLrx+WJTcVruFu/xX4qorwWNaFVoRKSulV2ZVaEWkzOjUgYhIZLUleEyrQisiZaUUj2jVblxEyorn8b8kzKy1mb1iZg+3dEw6ohWRshLhiHYMMB+obGmAjmhFpKzU4Ym3XMysCvgGUNA6miq0IlJW8umw0LAbTHYb/YW43wEXU+CBcsmcOkhbgzg1y4ufC+GbM1av3sAt099m/aYarh/VlysfnQNAnTvjhvWhdauWLU/6/gdLmXjnvaxfv4Ebr/53zrnwF/TssQsdO7bn5z85u6Axg95v+ajJY9aBu08EJjb2MzM7AVjh7i+b2eBCxtTsEa2ZnWdmuxfyAkmlrUGcmuXFz4XwzRmrdujEL4f1+ez+VcP7cNXwPnRpX8HK9Z+2OHf3Xj351WVbu+m2b9cO9zp27NatoPHW0/stuYBfhg0ERpjZIuBe4OtmdndLxpTr1MGvgBfN7O9m9mMz2zlJqJozlmZ22nLrxW7O+O6H69hSU8eulR2CZd7wH5fzy0vGsOrDj3hzYeFdH/R+Sy5UF1x3v8zdq9x9L+DbwFPu/p2WjClXoX0HqCJTcA8H3jCzx83szGx7m6YGqOaMJZidttx6MZszLly5ljtnvsMlxx4UNLd+P3TvtgOfbNxYcJ7eb8mFnt4VQrM9w8xstrsf1uB+BTAMOA041t1zHuEm7RnWsWMHbhp/NZ9+uokX/jEz6HmiNOXGzC6l3KSLyjRszvju/EU8eucjzf7+fWMPaPbnqzduZsJzC5jx3kpGHrw7/zV7EQP32YWKVq04+8je9OjS+FFtm5E/bj53zVrG/787mP7SbE7+5lDefe992rdvR21tHWMv/mmzhabDbkc3mw3bz/stRM+wM/c6OXEFvWPR5KL0DMtVaF9x90Y/EWbWwd1z/qdazRmlMbFW78pVaFsqV6EtRJJCu70IUWi/s+dJiWvO3e89UBLNGU9t6gdJiqyISLGlbplEd3+rWAMREQmhmOdekyqZebQiIiGU4qIyKrQiUlZSd+pARCRtdOpARCSy2mZmUm0rKrQiUlZ06kAk67Flr0TJ7XJunNweFxW2mI0Uj74MExGJTOdoRUQi06kDEZHImltWYFtRoRWRsqJ24yIikenUgYhIZDp1ICISmY5oRUQiS930LjNrS6ZXzhJ3/5uZnQ4cCcwHJrr7llADSVsnTnUljZ8bMztW7h57VnHehaOprOzC6O9fkPsJCWkfJ1eKl+DmauRzG/ANYIyZ3QV8C3gROAK4JeRA0taJU11J4+fGzI6Vu/i9ai4678pgefW0j5OrwxNvxZKr0B7s7qcCJwLHA6e4+13AD4Ame5GoC25pZqctN2b2turQ2lLax8mlsdC2yp4+6AJ0BLpmH28HVDT1JHXBLc3stOXGzN5WHVpbSvs4OXdPvDXHzHY3s6fNbL6ZzTOzMS0dU67mjBcAPwVaA78FRpJpQd4fuN/dx+V6AXXBLZ3stOXGzM43t0enHRLlduvWlUt+MYajBw9g0l2TmXBj7jNsyzesDj7efJTKPoYwzRn77XZM4kPVmUuebfL1zKwn0NPdZ5tZF+BlYJS7v5HvmJottNkX2w3A3ZeY2Q7AscBid5+Z5AXUBVfKQdJC2xJJCu32IkShPWK3QYlrzktLnkv8emb2IDDB3aflO6ac07vcfUmD26uB+/N9ERGRYqn15AslmtloYHSDhya6+8RGfm8vMt9LvdiSMWkerYiUlXyuDMsW1S8V1obMrDMwGTjf3de2ZEwqtCJSVkLOJjCzCjJF9h53f6ClOSq0IlJWQl0ZZmYG/BmY7+43FJJV+vNaRETyUOeeeMthIPBd4OtmNie7DW/JmHREKyJlJdQRrbs/DxQ8CwJUaEWkzOQz66BYVGhFElh477nRsrt88zfRsrdHCU4JFJ0KrYiUldQtkygikjY6ohURiUxHtCIikdV66S17qUIrImVFzRlFRCJTc0YRkch0RCsiElkqZx2Y2VfI9AzbHagB3gYmufuakANJWydOdSWNnxszO3Ru9ao13PLELNZv3MT1Zw3ntr+9zOIVq/l4/UbGnXEsXTu1L6nxFiN7W3XBLcVZB80uKmNm5wH/F2hPpvNtBzIFd7qZDQ45kLR14lRX0vi5MbND51bt1JVfnj7ks/s/OPZwxp4+hMN792LZ6nUF52sfJ1frdYm3Ysm1etfZwFB3/w8yLWy+5u5XAEOBG5t6krrglmZ22nJjZsfu0LqlppZxf3mS5+ctome3yoLztI+TC9WcMaQkyyTWn15oR6YbLu6+GHXBVVfSyLkxs2N3aK1o05qxpw/hpCMP4pnX3yk4T/s4uYDLJAaTqwvuGOAsYAYwCLjW3W8zs52Bye4+KNcLqAtu6WSnLTdmdr656x66rNmfr96wkQkPz2DGgsWcOOBA1m3cxKdbalj7ySYuHHUUO1Z2bPK5SRaV2R72MYRpztit876JK+jH6xcGWQYxlyRdcA8EvgrMdfcF+b6AuuBKOchVaAuh1bu2ClFou3b+SuKas2b9P4tSaJN0wZ0HzCvCWERECqZ5tCIikWnhbxGRyFJ5wYKISJqU4qkDdcEVkbLiefwvFzMbamZvmtlCM7u0pWPSEa2IlJVQR7Rm1hr4A3AcUA28ZGZT3f2NfLNUaEWkrAQ8R9sPWOju7wCY2b3ASCDvQpvX5WqxN2B02rLTlpvGMWtfaF/E/P8MzGqwjW7ws1OAWxrc/y4woSWvU2rnaEenMDttuTGz05YbMzttuTGzY465IN5guYDsNrHBjxu7mKFFh8ulVmhFREpFNZnVCutVAUtaEqRCKyLSuJeA3ma2t5m1Bb4NTG1JUKl9GTYx96+UXHbacmNmpy03ZnbacmNmxxxzNO5eY2Y/Af4HaA3c6pklCfKWc1EZEREpjE4diIhEpkIrIhJZyRTaUJe6NZJ7q5mtMLO5oTKzubub2dNmNt/M5mUXSQ+R297MZprZq9nccSFyG+S3NrNXzOzhwLmLzOx1M5tjZrMC5u5gZveb2YLsvh4QIHP/7Djrt7Vmdn6g8V6Q/Xuba2aTzKywroyfzx6TzZ1XyHgb+0yYWXczm2Zmb2f/7BYw+1vZMdeZWd+WjjvVtvWE4ew54tbAP4F9gLbAq2T6k4XIHgQcRmbh8pBj7gkclr3dBXgrxJjJzN3rnL1dAbwI9A847p8BfwEeDrw/FgE7RXhv3AH8KHu7LbBD4PzWwDJgzwBZvYB3gQ7Z+/cB3w80zoOAuUBHMl9i/w3o3cKsL30mgOuAS7O3LyXTTSVU9leB/YFngL6h3yNp2ErliPazS93cfTNQf6lbwdz9OeCjEFlfyF3q7rOzt9cB88l80ArNdXdfn71bkd2CfGNpZlXAN4BbQuTFZmaVZD64fwZw983uvjrwywwB/unu7wXKawN0MLM2ZIpii+ZdNuKrwAx3/8Tda4BngRNbEtTEZ2Ikmf+okf1zVKhsd5/v7m+2JK9clEqh7QW83+B+NXlQ4lAAAAKMSURBVAGKVrGY2V7AoWSOPkPktTazOcAKYJq7B8kFfgdcDMRYGdmBJ8zsZTMLdSXQPsBK4Lbs6Y5bzCxZt8/kvg1MChHk7h8A1wOLgaXAGnd/IkQ2maPZQWa2o5l1BIbz+cn0herh7kshcxAB7BIwe7tXKoU22KVuxWZmnYHJwPnuvjZEprvXunsfMlei9DOzgwrNNLMTgBXu/nLBA2zcQHc/DBgG/JuZ5WzcmUAbMv8M/aO7HwpsIPPP2iCyk9BHAH8NlNeNzJHh3sBuQCcz+06IbHefD1wLTAMeJ3N6rSZEtsRXKoU22KVuxWRmFWSK7D3u/kDo/Ow/k58BhgaIGwiMMLNFZE7NfN3M7g6QC4C7L8n+uQKYQuZ0UKGqgeoGR/T3kym8oQwDZrv78kB5xwLvuvtKd98CPAAcGSgbd/+zux/mme7THwFvh8oGlptZT4DsnysCZm/3SqXQBrvUrVjMzMicO5zv7jcEzN3ZzHbI3u5A5sObd/fhL3L3y9y9yt33IrN/n3L3IEdbZtbJzLrU3waOJ/NP3YK4+zLgfTPbP/vQEFqyRF3TTiPQaYOsxUB/M+uYfX8MIXPuPggz2yX75x7ASYQd+1TgzOztM4EHA2bLtv42rn4jc87pLTKzD64ImDuJzPmyLWSOkM4KlHsUmdMbrwFzstvwALmHAK9kc+cCV0bY14MJOOuAzLnUV7PbvMB/f33ILF/3GvDfQLdAuR2BD4GugfftODL/YZwL3AW0C5j9dzL/oXkVGFJAzpc+E8COwJNkjpKfBLoHzD4xe3sTsBz4n5D7PA2bLsEVEYmsVE4diIiULRVaEZHIVGhFRCJToRURiUyFVkQkMhVaEZHIVGhFRCL7/8Id/hKYo/EzAAAAAElFTkSuQmCC\n",
"text/plain": [
"<Figure size 432x288 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"amitt = generate_amitt_ttps.Amitt()\n",
"redgrid = amitt.create_padded_framework_table('AMITT Red', 'technique_ids', False)\n",
"\n",
"techcounts = amitt.it[['id_incident','id_technique']].drop_duplicates().groupby('id_technique').count().to_dict()['id_incident']\n",
"techlabels = redgrid[2:][:]\n",
"nrows = len(techlabels)\n",
"ncols = len(techlabels[0])\n",
"techgrid = np.zeros([nrows, ncols], dtype = int)\n",
"\n",
"for row in range(nrows):\n",
" for col in range(ncols):\n",
" if techlabels[row][col] in techcounts:\n",
" techgrid[row][col] = techcounts[techlabels[row][col]]\n",
"\n",
"sns.heatmap(techgrid, annot=True, annot_kws={\"size\": 7})\n",
"techgrid"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"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>id</th>\n",
" <th>name</th>\n",
" <th>phase_id</th>\n",
" <th>rank</th>\n",
" <th>summary</th>\n",
" <th>longname</th>\n",
" <th>technique_ids</th>\n",
" <th>counter_ids</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>TA01</td>\n",
" <td>Strategic Planning</td>\n",
" <td>P01</td>\n",
" <td>1</td>\n",
" <td>Define the desired end state, i.e. the set of ...</td>\n",
" <td>TA01 - Strategic Planning</td>\n",
" <td>[T0001, T0002, T0003, T0004]</td>\n",
" <td>[C00006, C00008, C00010, C00012, C00013, C0001...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>TA02</td>\n",
" <td>Objective Planning</td>\n",
" <td>P01</td>\n",
" <td>2</td>\n",
" <td>Set clearly defined, measurable, and achievabl...</td>\n",
" <td>TA02 - Objective Planning</td>\n",
" <td>[T0005, T0006]</td>\n",
" <td>[C00009, C00011, C00028, C00029, C00030, C0003...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>TA03</td>\n",
" <td>Develop People</td>\n",
" <td>P02</td>\n",
" <td>3</td>\n",
" <td>Develop online and offline users and agents, i...</td>\n",
" <td>TA03 - Develop People</td>\n",
" <td>[T0007, T0008, T0009]</td>\n",
" <td>[C00034, C00036, C00040, C00042, C00044, C0004...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>TA04</td>\n",
" <td>Develop Networks</td>\n",
" <td>P02</td>\n",
" <td>4</td>\n",
" <td>Develop online and offline communities and tra...</td>\n",
" <td>TA04 - Develop Networks</td>\n",
" <td>[T0010, T0011, T0012, T0013, T0014, T0015]</td>\n",
" <td>[C00047, C00052, C00053, C00056, C00059, C0006...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>TA05</td>\n",
" <td>Microtargeting</td>\n",
" <td>P02</td>\n",
" <td>5</td>\n",
" <td>Target very specific populations of people</td>\n",
" <td>TA05 - Microtargeting</td>\n",
" <td>[T0016, T0017, T0018]</td>\n",
" <td>[C00065, C00066, C00216]</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>TA06</td>\n",
" <td>Develop Content</td>\n",
" <td>P02</td>\n",
" <td>6</td>\n",
" <td>Create and acquire content used in incident</td>\n",
" <td>TA06 - Develop Content</td>\n",
" <td>[T0019, T0020, T0021, T0022, T0023, T0024, T00...</td>\n",
" <td>[C00014, C00032, C00071, C00072, C00074, C0007...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>TA07</td>\n",
" <td>Channel Selection</td>\n",
" <td>P02</td>\n",
" <td>7</td>\n",
" <td>Set up specific delivery, amplification and ma...</td>\n",
" <td>TA07 - Channel Selection</td>\n",
" <td>[T0029, T0030, T0031, T0032, T0033, T0034, T00...</td>\n",
" <td>[C00097, C00098, C00099, C00100, C00101, C0010...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>TA08</td>\n",
" <td>Pump Priming</td>\n",
" <td>P03</td>\n",
" <td>8</td>\n",
" <td>Release content on a targetted small scale, pr...</td>\n",
" <td>TA08 - Pump Priming</td>\n",
" <td>[T0039, T0040, T0041, T0042, T0043, T0044, T00...</td>\n",
" <td>[C00112, C00113, C00114, C00115, C00116, C0011...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>TA09</td>\n",
" <td>Exposure</td>\n",
" <td>P03</td>\n",
" <td>9</td>\n",
" <td>Release content to general public or push to l...</td>\n",
" <td>TA09 - Exposure</td>\n",
" <td>[T0047, T0048, T0049, T0050, T0051, T0052, T00...</td>\n",
" <td>[C00089, C00122, C00123, C00124, C00125, C0012...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>TA10</td>\n",
" <td>Go Physical</td>\n",
" <td>P03</td>\n",
" <td>10</td>\n",
" <td>Move incident into offline world</td>\n",
" <td>TA10 - Go Physical</td>\n",
" <td>[T0057, T0061]</td>\n",
" <td>[C00129, C00130]</td>\n",
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>TA11</td>\n",
" <td>Persistence</td>\n",
" <td>P03</td>\n",
" <td>11</td>\n",
" <td>Keep incident 'alive', beyond the incident cre...</td>\n",
" <td>TA11 - Persistence</td>\n",
" <td>[T0058, T0059, T0060]</td>\n",
" <td>[C00131, C00133, C00135, C00136, C00137, C0013...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>TA12</td>\n",
" <td>Measure Effectiveness</td>\n",
" <td>P04</td>\n",
" <td>12</td>\n",
" <td>Measure effectiveness of incident, for use in ...</td>\n",
" <td>TA12 - Measure Effectiveness</td>\n",
" <td>[T0062, T0063, T0064]</td>\n",
" <td>[C00090, C00140, C00147, C00148, C00149]</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" id name phase_id rank \\\n",
"0 TA01 Strategic Planning P01 1 \n",
"1 TA02 Objective Planning P01 2 \n",
"2 TA03 Develop People P02 3 \n",
"3 TA04 Develop Networks P02 4 \n",
"4 TA05 Microtargeting P02 5 \n",
"5 TA06 Develop Content P02 6 \n",
"6 TA07 Channel Selection P02 7 \n",
"7 TA08 Pump Priming P03 8 \n",
"8 TA09 Exposure P03 9 \n",
"9 TA10 Go Physical P03 10 \n",
"10 TA11 Persistence P03 11 \n",
"11 TA12 Measure Effectiveness P04 12 \n",
"\n",
" summary \\\n",
"0 Define the desired end state, i.e. the set of ... \n",
"1 Set clearly defined, measurable, and achievabl... \n",
"2 Develop online and offline users and agents, i... \n",
"3 Develop online and offline communities and tra... \n",
"4 Target very specific populations of people \n",
"5 Create and acquire content used in incident \n",
"6 Set up specific delivery, amplification and ma... \n",
"7 Release content on a targetted small scale, pr... \n",
"8 Release content to general public or push to l... \n",
"9 Move incident into offline world \n",
"10 Keep incident 'alive', beyond the incident cre... \n",
"11 Measure effectiveness of incident, for use in ... \n",
"\n",
" longname \\\n",
"0 TA01 - Strategic Planning \n",
"1 TA02 - Objective Planning \n",
"2 TA03 - Develop People \n",
"3 TA04 - Develop Networks \n",
"4 TA05 - Microtargeting \n",
"5 TA06 - Develop Content \n",
"6 TA07 - Channel Selection \n",
"7 TA08 - Pump Priming \n",
"8 TA09 - Exposure \n",
"9 TA10 - Go Physical \n",
"10 TA11 - Persistence \n",
"11 TA12 - Measure Effectiveness \n",
"\n",
" technique_ids \\\n",
"0 [T0001, T0002, T0003, T0004] \n",
"1 [T0005, T0006] \n",
"2 [T0007, T0008, T0009] \n",
"3 [T0010, T0011, T0012, T0013, T0014, T0015] \n",
"4 [T0016, T0017, T0018] \n",
"5 [T0019, T0020, T0021, T0022, T0023, T0024, T00... \n",
"6 [T0029, T0030, T0031, T0032, T0033, T0034, T00... \n",
"7 [T0039, T0040, T0041, T0042, T0043, T0044, T00... \n",
"8 [T0047, T0048, T0049, T0050, T0051, T0052, T00... \n",
"9 [T0057, T0061] \n",
"10 [T0058, T0059, T0060] \n",
"11 [T0062, T0063, T0064] \n",
"\n",
" counter_ids \n",
"0 [C00006, C00008, C00010, C00012, C00013, C0001... \n",
"1 [C00009, C00011, C00028, C00029, C00030, C0003... \n",
"2 [C00034, C00036, C00040, C00042, C00044, C0004... \n",
"3 [C00047, C00052, C00053, C00056, C00059, C0006... \n",
"4 [C00065, C00066, C00216] \n",
"5 [C00014, C00032, C00071, C00072, C00074, C0007... \n",
"6 [C00097, C00098, C00099, C00100, C00101, C0010... \n",
"7 [C00112, C00113, C00114, C00115, C00116, C0011... \n",
"8 [C00089, C00122, C00123, C00124, C00125, C0012... \n",
"9 [C00129, C00130] \n",
"10 [C00131, C00133, C00135, C00136, C00137, C0013... \n",
"11 [C00090, C00140, C00147, C00148, C00149] "
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"amitt.df_tactics"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"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>id</th>\n",
" <th>name</th>\n",
" <th>summary</th>\n",
" <th>id_incident</th>\n",
" <th>name_incident</th>\n",
" <th>id_technique</th>\n",
" <th>name_technique</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>I00002T001</td>\n",
" <td>buy FB targeted ads</td>\n",
" <td></td>\n",
" <td>I00002</td>\n",
" <td>#VaccinateUS</td>\n",
" <td>T0018</td>\n",
" <td>Paid targeted ads</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>I00005T003</td>\n",
" <td>Targeted FB paid ads</td>\n",
" <td></td>\n",
" <td>I00005</td>\n",
" <td>Brexit vote</td>\n",
" <td>T0018</td>\n",
" <td>Paid targeted ads</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>I00017T004</td>\n",
" <td>Targeted FB paid ads</td>\n",
" <td></td>\n",
" <td>I00017</td>\n",
" <td>US presidential elections</td>\n",
" <td>T0018</td>\n",
" <td>Paid targeted ads</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>I00002T002</td>\n",
" <td>Promote \"funding\" campaign</td>\n",
" <td></td>\n",
" <td>I00002</td>\n",
" <td>#VaccinateUS</td>\n",
" <td>T0017</td>\n",
" <td>Promote online funding</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>I00002T003</td>\n",
" <td>create web-site - information pollution</td>\n",
" <td></td>\n",
" <td>I00002</td>\n",
" <td>#VaccinateUS</td>\n",
" <td>T0019</td>\n",
" <td>Generate information pollution</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>181</th>\n",
" <td>I00044T008</td>\n",
" <td>Promote fake “experts” with impressive (and sc...</td>\n",
" <td></td>\n",
" <td>I00044</td>\n",
" <td>JadeHelm exercise</td>\n",
" <td>T0009</td>\n",
" <td>Create fake experts</td>\n",
" </tr>\n",
" <tr>\n",
" <th>182</th>\n",
" <td>I00047T003</td>\n",
" <td>(Distort) Kremlin-controlled RT cited Russian ...</td>\n",
" <td></td>\n",
" <td>I00047</td>\n",
" <td>Sea of Azov</td>\n",
" <td>T0023</td>\n",
" <td>Distort facts</td>\n",
" </tr>\n",
" <tr>\n",
" <th>183</th>\n",
" <td>I00053T002</td>\n",
" <td>Distorted, saccharine “news” about the Chinese...</td>\n",
" <td></td>\n",
" <td>I00053</td>\n",
" <td>China Huawei CFO Arrest</td>\n",
" <td>T0023</td>\n",
" <td>Distort facts</td>\n",
" </tr>\n",
" <tr>\n",
" <th>184</th>\n",
" <td>I00056T005</td>\n",
" <td>Memes... anti-Isreal/USA/West, conspiracy narr...</td>\n",
" <td></td>\n",
" <td>I00056</td>\n",
" <td>Iran Influence Operations</td>\n",
" <td>T0022</td>\n",
" <td>Conspiracy narratives</td>\n",
" </tr>\n",
" <tr>\n",
" <th>185</th>\n",
" <td>I00056T006</td>\n",
" <td>Fake news/synthetic web-sites</td>\n",
" <td></td>\n",
" <td>I00056</td>\n",
" <td>Iran Influence Operations</td>\n",
" <td>T0008</td>\n",
" <td>Create fake or imposter news sites</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>186 rows × 7 columns</p>\n",
"</div>"
],
"text/plain": [
" id name summary \\\n",
"0 I00002T001 buy FB targeted ads \n",
"1 I00005T003 Targeted FB paid ads \n",
"2 I00017T004 Targeted FB paid ads \n",
"3 I00002T002 Promote \"funding\" campaign \n",
"4 I00002T003 create web-site - information pollution \n",
".. ... ... ... \n",
"181 I00044T008 Promote fake “experts” with impressive (and sc... \n",
"182 I00047T003 (Distort) Kremlin-controlled RT cited Russian ... \n",
"183 I00053T002 Distorted, saccharine “news” about the Chinese... \n",
"184 I00056T005 Memes... anti-Isreal/USA/West, conspiracy narr... \n",
"185 I00056T006 Fake news/synthetic web-sites \n",
"\n",
" id_incident name_incident id_technique \\\n",
"0 I00002 #VaccinateUS T0018 \n",
"1 I00005 Brexit vote T0018 \n",
"2 I00017 US presidential elections T0018 \n",
"3 I00002 #VaccinateUS T0017 \n",
"4 I00002 #VaccinateUS T0019 \n",
".. ... ... ... \n",
"181 I00044 JadeHelm exercise T0009 \n",
"182 I00047 Sea of Azov T0023 \n",
"183 I00053 China Huawei CFO Arrest T0023 \n",
"184 I00056 Iran Influence Operations T0022 \n",
"185 I00056 Iran Influence Operations T0008 \n",
"\n",
" name_technique \n",
"0 Paid targeted ads \n",
"1 Paid targeted ads \n",
"2 Paid targeted ads \n",
"3 Promote online funding \n",
"4 Generate information pollution \n",
".. ... \n",
"181 Create fake experts \n",
"182 Distort facts \n",
"183 Distort facts \n",
"184 Conspiracy narratives \n",
"185 Create fake or imposter news sites \n",
"\n",
"[186 rows x 7 columns]"
]
},
"execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"amitt.it"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"import tkinter as Tk\n",
"import numpy as np\n",
"\n",
"class Begueradj(Tk.Frame):\n",
" def __init__(self,parent):\n",
" Tk.Frame.__init__(self, parent)\n",
" self.parent = parent\n",
" self.initialize()\n",
"\n",
" def initialize(self):\n",
" '''\n",
" Draw the GUI\n",
" '''\n",
" self.parent.title(\"RUN ON START TEST\") \n",
" self.parent.grid_rowconfigure(1,weight=1)\n",
" self.parent.grid_columnconfigure(1,weight=1)\n",
"\n",
" self.frame = Tk.Frame(self.parent) \n",
" self.frame.pack(fill=Tk.X, padx=5, pady=5)\n",
"\n",
" # Create a 6x7 array of zeros as the one you used\n",
" self.a = np.zeros((6,7))\n",
" for i in range(0,self.a.shape[0]):\n",
" for j in range(0,self.a.shape[1]):\n",
" self.b = Tk.Button(self.frame, text = 'Hello')\n",
" self.b.grid(row=i, column= j)\n",
"\n",
"# Start the main program here \n",
"if __name__ == \"__main__\": \n",
" root=Tk.Tk()\n",
" app = Begueradj(root) \n",
" root.mainloop()"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"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>id</th>\n",
" <th>technique_id</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>C00008</td>\n",
" <td>TA01</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>C00008</td>\n",
" <td>TA06</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>C00008</td>\n",
" <td>TA08</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>C00008</td>\n",
" <td>T0006</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>C00008</td>\n",
" <td>T0009</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>120</th>\n",
" <td>C00165</td>\n",
" <td>T00025</td>\n",
" </tr>\n",
" <tr>\n",
" <th>126</th>\n",
" <td>C00174</td>\n",
" <td>T0001</td>\n",
" </tr>\n",
" <tr>\n",
" <th>138</th>\n",
" <td>C00197</td>\n",
" <td>T0007</td>\n",
" </tr>\n",
" <tr>\n",
" <th>138</th>\n",
" <td>C00197</td>\n",
" <td>T0011</td>\n",
" </tr>\n",
" <tr>\n",
" <th>140</th>\n",
" <td>C00202</td>\n",
" <td>T0025</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>263 rows × 2 columns</p>\n",
"</div>"
],
"text/plain": [
" id technique_id\n",
"1 C00008 TA01\n",
"1 C00008 TA06\n",
"1 C00008 TA08\n",
"1 C00008 T0006\n",
"1 C00008 T0009\n",
".. ... ...\n",
"120 C00165 T00025\n",
"126 C00174 T0001\n",
"138 C00197 T0007\n",
"138 C00197 T0011\n",
"140 C00202 T0025\n",
"\n",
"[263 rows x 2 columns]"
]
},
"execution_count": 14,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ct = amitt.cross_counterid_techniqueid\n",
"ct[ct['technique_id'] != '']"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"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>id</th>\n",
" <th>technique_id</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>138</th>\n",
" <td>C00197</td>\n",
" <td>T0007</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" id technique_id\n",
"138 C00197 T0007"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ct[(ct['id'] == 'C00197') & (ct['technique_id'].isin(['T0002', 'T0007']))]"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"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>id</th>\n",
" <th>technique_id</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>C00008</td>\n",
" <td>T0006</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>C00008</td>\n",
" <td>T0009</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>C00008</td>\n",
" <td>T0008</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>C00008</td>\n",
" <td>T0013</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>C00008</td>\n",
" <td>T0014</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>108</th>\n",
" <td>C00149</td>\n",
" <td>T0020</td>\n",
" </tr>\n",
" <tr>\n",
" <th>126</th>\n",
" <td>C00174</td>\n",
" <td>T0001</td>\n",
" </tr>\n",
" <tr>\n",
" <th>138</th>\n",
" <td>C00197</td>\n",
" <td>T0007</td>\n",
" </tr>\n",
" <tr>\n",
" <th>138</th>\n",
" <td>C00197</td>\n",
" <td>T0011</td>\n",
" </tr>\n",
" <tr>\n",
" <th>140</th>\n",
" <td>C00202</td>\n",
" <td>T0025</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>190 rows × 2 columns</p>\n",
"</div>"
],
"text/plain": [
" id technique_id\n",
"1 C00008 T0006\n",
"1 C00008 T0009\n",
"1 C00008 T0008\n",
"1 C00008 T0013\n",
"1 C00008 T0014\n",
".. ... ...\n",
"108 C00149 T0020\n",
"126 C00174 T0001\n",
"138 C00197 T0007\n",
"138 C00197 T0011\n",
"140 C00202 T0025\n",
"\n",
"[190 rows x 2 columns]"
]
},
"execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"ct = ct[ct['technique_id'].isin(amitt.df_techniques['id'].to_list()) & ct['id'].isin(amitt.df_counters['id'].to_list())]\n",
"ct"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {},
"outputs": [
{
"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>id</th>\n",
" <th>technique_id</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>C00008</td>\n",
" <td>T0008</td>\n",
" </tr>\n",
" <tr>\n",
" <th>24</th>\n",
" <td>C00042</td>\n",
" <td>T0022</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" id technique_id\n",
"1 C00008 T0008\n",
"24 C00042 T0022"
]
},
"execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"technique_id_list = ['T0007', 'T0008', 'T0022', 'T0023', 'T0043', 'T0052', 'T0036', 'T0037', 'T0038']\n",
"counter_id_list = ['C00009', 'C00008', 'C00042', 'C00030', 'C00093', 'C00193', 'C00073', 'C000197', 'C00174', 'C00205']\n",
"possible_counters_for_techniques = ct[ct['technique_id'].isin(technique_id_list)] \n",
"possible_techniques_for_counters = ct[ct['technique_id'].isin(counter_id_list)] \n",
"coverage = ct[(ct['id'].isin(counter_id_list)) & (ct['technique_id'].isin(technique_id_list))]\n",
"coverage"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"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.8.3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}