{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": { "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Updating ../counters/C00008.md\n", "Updating ../counters/C00009.md\n", "Updating ../counters/C00011.md\n", "Updating ../counters/C00012.md\n", "Updating ../counters/C00014.md\n", "Updating ../counters/C00016.md\n", "Updating ../counters/C00020.md\n", "Updating ../counters/C00022.md\n", "Updating ../counters/C00023.md\n", "Updating ../counters/C00024.md\n", "Updating ../counters/C00025.md\n", "Updating ../counters/C00026.md\n", "Updating ../counters/C00027.md\n", "Updating ../counters/C00031.md\n", "Updating ../counters/C00036.md\n", "Updating ../counters/C00039.md\n", "Updating ../counters/C00040.md\n", "Updating ../counters/C00042.md\n", "Updating ../counters/C00043.md\n", "Updating ../counters/C00044.md\n", "Updating ../counters/C00045.md\n", "Updating ../counters/C00048.md\n", "Updating ../counters/C00049.md\n", "Updating ../counters/C00050.md\n", "Updating ../counters/C00051.md\n", "Updating ../counters/C00052.md\n", "Updating ../counters/C00053.md\n", "Updating ../counters/C00055.md\n", "Updating ../counters/C00060.md\n", "Updating ../counters/C00063.md\n", "Updating ../counters/C00065.md\n", "Updating ../counters/C00066.md\n", "Updating ../counters/C00067.md\n", "Updating ../counters/C00068.md\n", "Updating ../counters/C00069.md\n", "Updating ../counters/C00070.md\n", "Updating ../counters/C00071.md\n", "Updating ../counters/C00072.md\n", "Updating ../counters/C00073.md\n", "Updating ../counters/C00074.md\n", "Updating ../counters/C00076.md\n", "Updating ../counters/C00078.md\n", "Updating ../counters/C00079.md\n", "Updating ../counters/C00088.md\n", "Updating ../counters/C00089.md\n", "Updating ../counters/C00090.md\n", "Updating ../counters/C00091.md\n", "Updating ../counters/C00092.md\n", "Updating ../counters/C00093.md\n", "Updating ../counters/C00094.md\n", "Updating ../counters/C00095.md\n", "Updating ../counters/C00096.md\n", "Updating ../counters/C00097.md\n", "Updating ../counters/C00098.md\n", "Updating ../counters/C00099.md\n", "Updating ../counters/C00101.md\n", "Updating ../counters/C00102.md\n", "Updating ../counters/C00103.md\n", "Updating ../counters/C00107.md\n", "Updating ../counters/C00112.md\n", "Updating ../counters/C00113.md\n", "Updating ../counters/C00114.md\n", "Updating ../counters/C00115.md\n", "Updating ../counters/C00116.md\n", "Updating ../counters/C00117.md\n", "Updating ../counters/C00118.md\n", "Updating ../counters/C00119.md\n", "Updating ../counters/C00120.md\n", "Updating ../counters/C00121.md\n", "Updating ../counters/C00123.md\n", "Updating ../counters/C00126.md\n", "Updating ../counters/C00129.md\n", "Updating ../counters/C00131.md\n", "Updating ../counters/C00133.md\n", "Updating ../counters/C00135.md\n", "Updating ../counters/C00136.md\n", "Updating ../counters/C00137.md\n", "Updating ../counters/C00144.md\n", "Updating ../counters/C00145.md\n", "Updating ../counters/C00147.md\n", "Updating ../counters/C00149.md\n", "Updating ../counters/C00202.md\n", "Updating ../counters/C00210.md\n", "updated ../incidents_list.md\n", "updated ../amitt_red_framework.md\n", "updated ../amitt_red_framework_clickable.html\n", "Writing ../counter_tactics/TA01counters.md\n", "Writing ../counter_tactics/TA02counters.md\n", "Writing ../counter_tactics/TA03counters.md\n", "Writing ../counter_tactics/TA04counters.md\n", "Writing ../counter_tactics/TA05counters.md\n", "Writing ../counter_tactics/TA06counters.md\n", "Writing ../counter_tactics/TA07counters.md\n", "Writing ../counter_tactics/TA08counters.md\n", "Writing ../counter_tactics/TA09counters.md\n", "Writing ../counter_tactics/TA10counters.md\n", "Writing ../counter_tactics/TA11counters.md\n", "Writing ../counter_tactics/TA12counters.md\n", "updated ../tactics_by_responsetype_table.md\n", "Writing metatechniques/cleaningcounters.md\n", "Writing metatechniques/countermessagingcounters.md\n", "Writing metatechniques/data pollutioncounters.md\n", "Writing metatechniques/daylightcounters.md\n", "Writing metatechniques/dilutioncounters.md\n", "Writing metatechniques/diversioncounters.md\n", "Writing metatechniques/frictioncounters.md\n", "Writing metatechniques/metatechniquecounters.md\n", "Writing metatechniques/reduce resourcescounters.md\n", "Writing metatechniques/removalcounters.md\n", "Writing metatechniques/resiliencecounters.md\n", "Writing metatechniques/scoringcounters.md\n", "Writing metatechniques/targetingcounters.md\n", "Writing metatechniques/verificationcounters.md\n", "updated ../metatechniques_by_responsetype_table.md\n", "Writing ../resources_needed/DHScounters.md\n", "Writing ../resources_needed/NGOcounters.md\n", "Writing ../resources_needed/activistscounters.md\n", "Writing ../resources_needed/adtechcounters.md\n", "Writing ../resources_needed/civil_societycounters.md\n", "Writing ../resources_needed/community_groupscounters.md\n", "Writing ../resources_needed/companiescounters.md\n", "Writing ../resources_needed/content_creatorscounters.md\n", "Writing ../resources_needed/data_scientistcounters.md\n", "Writing ../resources_needed/datastreamscounters.md\n", "Writing ../resources_needed/developerscounters.md\n", "Writing ../resources_needed/educatorscounters.md\n", "Writing ../resources_needed/elvescounters.md\n", "Writing ../resources_needed/factcheckerscounters.md\n", "Writing ../resources_needed/fundingcounters.md\n", "Writing ../resources_needed/gamesdesignerscounters.md\n", "Writing ../resources_needed/governmentcounters.md\n", "Writing ../resources_needed/government:policymakerscounters.md\n", "Writing ../resources_needed/influencerscounters.md\n", "Writing ../resources_needed/influencers:trusted_authoritycounters.md\n", "Writing ../resources_needed/infoseccounters.md\n", "Writing ../resources_needed/librariescounters.md\n", "Writing ../resources_needed/mediacounters.md\n", "Writing ../resources_needed/militarycounters.md\n", "Writing ../resources_needed/moneycounters.md\n", "Writing ../resources_needed/platform_admincounters.md\n", "Writing ../resources_needed/platform_admin:adtechcounters.md\n", "Writing ../resources_needed/platform_admin:fundingsitescounters.md\n", "Writing ../resources_needed/platform_admin:socialmediacounters.md\n", "Writing ../resources_needed/platform_algorithmscounters.md\n", "Writing ../resources_needed/platform_outreachcounters.md\n", "Writing ../resources_needed/platformscounters.md\n", "Writing ../resources_needed/publiccounters.md\n", "Writing ../resources_needed/public:account_ownerscounters.md\n", "Writing ../resources_needed/religious_organisationscounters.md\n", "Writing ../resources_needed/schoolscounters.md\n", "Writing ../resources_needed/server_admincounters.md\n", "updated ../resources_by_responsetype_table.md\n" ] } ], "source": [ "from generate_amitt_ttps import Amitt\n", "amitt = Amitt()\n", "amitt.generate_and_write_datafiles()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "vars(amitt)['tactics']" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "vars(amitt).keys()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "###. TEST AREA" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "def create_tactic_counters_string(tactic_id):\n", " table_string = '''\n", "| Response types | Counters |\n", "| -------------- | -------- |\n", "'''\n", " tactic_counters = amitt.df_counters[amitt.df_counters['tactic_id']==tactic_id]\n", " row_string = '| {0} | [{1} {2}](../counters/{1}.md) |\\n'\n", " for index, row in tactic_counters.sort_values(['responsetype', 'id']).iterrows():\n", " table_string += row_string.format(row['responsetype'], row['id'], row['name'])\n", " return table_string\n", "\n", "\n", "def create_technique_counters_string(technique_id):\n", " table_string = '''\n", "| Counters |\n", "| -------- |\n", "'''\n", " technique_counters = amitt.cross_counterid_techniqueid[amitt.cross_counterid_techniqueid['technique_id']==technique_id]\n", " technique_counters = pd.merge(technique_counters, amitt.df_counters[['id', 'name']])\n", " row_string = '| [{0} {1}](../counters/{0}.md) |\\n'\n", " for index, row in technique_counters.sort_values('id').iterrows():\n", " table_string += row_string.format(row['id'], row['name'])\n", " return table_string\n", "\n", "create_technique_counters_string('TA01')" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "scrolled": true }, "outputs": [], "source": [ "amitt.df_counters" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "amitt.cross_counterid_techniqueid[amitt.cross_counterid_techniqueid['technique_id'] == 'T0006']" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "amitt.cross_counterid_techniqueid" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "technique_id='T0006'\n", "xx = amitt.cross_counterid_techniqueid[amitt.cross_counterid_techniqueid['technique_id']==technique_id]\n", "pd.merge(xx, amitt.df_counters[['id', 'name']])" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "tactics=self.create_counter_tactics_string(row['id'])\n", "techniques=self.create_counter_techniques_string(row['id'])\n", "incidents=self.create_counter_incidents_string(row['id'])" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "pd.pivot_table(amitt.df_counters[['tactic_id', 'responsetype','id']], index='responsetype', columns='tactic_id', aggfunc=len, fill_value=0)" ] }, { "cell_type": "code", "execution_count": 2, "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", "
idtechnique_id
6C00008TA01
6C00008TA06
6C00008TA08
6C00008T0006
6C00008T0009
.........
182C00145T0015
182C00145T0046
183C00147T0060
185C00149TA12
185C00149T0020
\n", "

283 rows × 2 columns

\n", "
" ], "text/plain": [ " id technique_id\n", "6 C00008 TA01\n", "6 C00008 TA06\n", "6 C00008 TA08\n", "6 C00008 T0006\n", "6 C00008 T0009\n", ".. ... ...\n", "182 C00145 T0015\n", "182 C00145 T0046\n", "183 C00147 T0060\n", "185 C00149 TA12\n", "185 C00149 T0020\n", "\n", "[283 rows x 2 columns]" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "amitt.cross_counterid_techniqueid" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "'\\n| Counters these Techniques |\\n| ------------------------- |\\n| [C00145 Create hashtag](../techniques/C00145.md) |\\n| [C00145 Search Engine Optimization](../techniques/C00145.md) |\\n'" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import pandas as pd\n", "counter_id = 'C00145'\n", "table_string = '''\n", "| Counters these Techniques |\n", "| ------------------------- |\n", "'''\n", "counter_techniques = amitt.cross_counterid_techniqueid[amitt.cross_counterid_techniqueid['id']==counter_id]\n", "counter_techniques = pd.merge(counter_techniques, amitt.df_techniques[['id', 'name']].rename(columns={'id': 'technique_id'}))\n", "row_string = '| [{0} {1}](../techniques/{0}.md) |\\n'\n", "for index, row in counter_techniques.sort_values('id').iterrows():\n", " table_string += row_string.format(row['id'], row['name'])\n", "\n", "table_string" ] }, { "cell_type": "code", "execution_count": 9, "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", "
idtechnique_id
182C00145T0015
182C00145T0046
\n", "
" ], "text/plain": [ " id technique_id\n", "182 C00145 T0015\n", "182 C00145 T0046" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "counter_techniques = amitt.cross_counterid_techniqueid[amitt.cross_counterid_techniqueid['id']==counter_id]\n", "\n", "counter_techniques" ] }, { "cell_type": "code", "execution_count": 10, "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", "
idname
0T00015Ds (dismiss, distort, distract, dismay, divide)
1T0002Facilitate State Propaganda
2T0003Leverage Existing Narratives
3T0004Competing Narratives
4T0005Center of Gravity Analysis
.........
56T0057Organise remote rallies and events
57T0058Legacy web content
58T0059Play the long game
59T0060Continue to amplify
60T0061Sell merchandising
\n", "

61 rows × 2 columns

\n", "
" ], "text/plain": [ " id name\n", "0 T0001 5Ds (dismiss, distort, distract, dismay, divide)\n", "1 T0002 Facilitate State Propaganda\n", "2 T0003 Leverage Existing Narratives\n", "3 T0004 Competing Narratives\n", "4 T0005 Center of Gravity Analysis\n", ".. ... ...\n", "56 T0057 Organise remote rallies and events\n", "57 T0058 Legacy web content\n", "58 T0059 Play the long game\n", "59 T0060 Continue to amplify\n", "60 T0061 Sell merchandising\n", "\n", "[61 rows x 2 columns]" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "amitt.df_techniques[['id', 'name']]" ] }, { "cell_type": "code", "execution_count": 17, "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", "
idtechnique_idname
0C00145T0015Create hashtag
1C00145T0046Search Engine Optimization
\n", "
" ], "text/plain": [ " id technique_id name\n", "0 C00145 T0015 Create hashtag\n", "1 C00145 T0046 Search Engine Optimization" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "pd.merge(counter_techniques, amitt.df_techniques[['id', 'name']].rename(columns={'id': 'technique_id'}))" ] }, { "cell_type": "code", "execution_count": 15, "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", "
technique_idname
0T00015Ds (dismiss, distort, distract, dismay, divide)
1T0002Facilitate State Propaganda
2T0003Leverage Existing Narratives
3T0004Competing Narratives
4T0005Center of Gravity Analysis
.........
56T0057Organise remote rallies and events
57T0058Legacy web content
58T0059Play the long game
59T0060Continue to amplify
60T0061Sell merchandising
\n", "

61 rows × 2 columns

\n", "
" ], "text/plain": [ " technique_id name\n", "0 T0001 5Ds (dismiss, distort, distract, dismay, divide)\n", "1 T0002 Facilitate State Propaganda\n", "2 T0003 Leverage Existing Narratives\n", "3 T0004 Competing Narratives\n", "4 T0005 Center of Gravity Analysis\n", ".. ... ...\n", "56 T0057 Organise remote rallies and events\n", "57 T0058 Legacy web content\n", "58 T0059 Play the long game\n", "59 T0060 Continue to amplify\n", "60 T0061 Sell merchandising\n", "\n", "[61 rows x 2 columns]" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "amitt.df_techniques[['id', 'name']].rename(columns={'id': 'technique_id'})" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
idname
14T0015Create hashtag
\n", "
" ], "text/plain": [ " id name\n", "14 T0015 Create hashtag" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "amitt.df_techniques[amitt.df_techniques['id'] == 'T0015'][['id', 'name']]" ] }, { "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": 4 }