{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": { "scrolled": true }, "outputs": [], "source": [ "from generate_amitt_ttps import Amitt\n", "amitt = Amitt()\n", "amitt.update_markdown_files()" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "updated ../matrix.md\n", "updated ../incidents.md\n", "updated ../matrix_to_message.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 ../counter_tactic_counts.md\n", "Writing ../counters_metatag/cleaningcounters.md\n", "Writing ../counters_metatag/countermessagingcounters.md\n", "Writing ../counters_metatag/data pollutioncounters.md\n", "Writing ../counters_metatag/daylightcounters.md\n", "Writing ../counters_metatag/dilutioncounters.md\n", "Writing ../counters_metatag/diversioncounters.md\n", "Writing ../counters_metatag/frictioncounters.md\n", "Writing ../counters_metatag/metatechniquecounters.md\n", "Writing ../counters_metatag/reduce resourcescounters.md\n", "Writing ../counters_metatag/removalcounters.md\n", "Writing ../counters_metatag/resiliencecounters.md\n", "Writing ../counters_metatag/scoringcounters.md\n", "Writing ../counters_metatag/targetingcounters.md\n", "Writing ../counters_metatag/verificationcounters.md\n", "updated ../counter_metatag_counts.md\n", "Writing ../counter_resource/DHScounters.md\n", "Writing ../counter_resource/NGOcounters.md\n", "Writing ../counter_resource/activistscounters.md\n", "Writing ../counter_resource/adtechcounters.md\n", "Writing ../counter_resource/civil_societycounters.md\n", "Writing ../counter_resource/community_groupscounters.md\n", "Writing ../counter_resource/companiescounters.md\n", "Writing ../counter_resource/content_creatorscounters.md\n", "Writing ../counter_resource/data_scientistcounters.md\n", "Writing ../counter_resource/datastreamscounters.md\n", "Writing ../counter_resource/developerscounters.md\n", "Writing ../counter_resource/educatorscounters.md\n", "Writing ../counter_resource/elvescounters.md\n", "Writing ../counter_resource/factcheckerscounters.md\n", "Writing ../counter_resource/fundingcounters.md\n", "Writing ../counter_resource/gamesdesignerscounters.md\n", "Writing ../counter_resource/governmentcounters.md\n", "Writing ../counter_resource/government:policymakerscounters.md\n", "Writing ../counter_resource/influencerscounters.md\n", "Writing ../counter_resource/influencers:trusted_authoritycounters.md\n", "Writing ../counter_resource/infoseccounters.md\n", "Writing ../counter_resource/librariescounters.md\n", "Writing ../counter_resource/mediacounters.md\n", "Writing ../counter_resource/militarycounters.md\n", "Writing ../counter_resource/moneycounters.md\n", "Writing ../counter_resource/platform_admincounters.md\n", "Writing ../counter_resource/platform_admin:adtechcounters.md\n", "Writing ../counter_resource/platform_admin:fundingsitescounters.md\n", "Writing ../counter_resource/platform_admin:socialmediacounters.md\n", "Writing ../counter_resource/platform_algorithmscounters.md\n", "Writing ../counter_resource/platform_outreachcounters.md\n", "Writing ../counter_resource/platformscounters.md\n", "Writing ../counter_resource/publiccounters.md\n", "Writing ../counter_resource/public:account_ownerscounters.md\n", "Writing ../counter_resource/religious_organisationscounters.md\n", "Writing ../counter_resource/schoolscounters.md\n", "Writing ../counter_resource/server_admincounters.md\n", "updated ../counter_resource_counts.md\n" ] } ], "source": [ "amitt.write_grid_markdown()\n", "amitt.write_incidentlist_markdown()\n", "amitt.write_grid_message_generator()\n", "amitt.write_counters_tactics_markdown()\n", "amitt.write_counters_metacounts_markdown()\n", "amitt.write_counters_resource_markdown()" ] }, { "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": 18, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\"\\n| Counters |\\n| -------- |\\n| [C00008 Create shared fact-checking database](../counters/C00008.md) |\\n| [C00014 Real-time updates to fact-checking database](../counters/C00014.md) |\\n| [C00015 Reputation scores for social media users](../counters/C00015.md) |\\n| [C00023 Promote civility as an identity that people will defend](../counters/C00023.md) |\\n| [C00024 Promote constructive narratives i.e. not polarising. Pro-life, pro-choice, or pro-USA?](../counters/C00024.md) |\\n| [C00025 Promote identity neutral narratives](../counters/C00025.md) |\\n| [C00073 Educate on how to handle info pollution. Push out targeted education on why it's pollution](../counters/C00073.md) |\\n\"" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "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": 4, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
idnamemetatechniquesummaryplaybooksresources_neededhow_foundreferencesincident_idstacticresponsetypenotestechniqueslongnametactic_idtactic_name
0C00001Better models of info spread up the layersmetatechniqueNaNNaNNaN2019-11-workshopNaNNaNTA01 Strategic PlanningALLNaNNaNC00001 - Better models of info spread up the l...TA01Strategic Planning
1C00003How can we safeguard against extremists using ...metatechniqueNaNNaNNaN2019-11-workshopNaNNaNTA01 Strategic PlanningALLNaNNaNC00003 - How can we safeguard against extremis...TA01Strategic Planning
2C00004Managing like a chronic diseasemetatechniqueNaNNaNNaN2019-11-workshopNaNNaNTA01 Strategic PlanningALLNaNNaNC00004 - Managing like a chronic diseaseTA01Strategic Planning
3C00005Policy: makers, terminology, elements: a) broa...metatechniqueNaNNaNNaN2019-11-workshopNaNNaNTA01 Strategic PlanningALLNaNNaNC00005 - Policy: makers, terminology, elements...TA01Strategic Planning
4C00006Charge for social mediafrictionNo corresponding AMITT technique.NaNplatform_admin:socialmedia2019-11-workshopNaNNaNTA01 Strategic PlanningD2 DenyNaNNaNC00006 - Charge for social mediaTA01Strategic Planning
...................................................
132C00215Use fraud legislation to clean up social mediametatechniqueNaNNaNgovernment:policymakers2019-11-workshopNaNNaNTA07 Channel SelectionD3 DisruptNaNNaNC00215 - Use fraud legislation to clean up soc...TA07Channel Selection
82C00216Use advertiser controls to stem flow of funds ...reduce resourcesNaNNaNplatform_admin:adtech2019-11-workshopNaNNaNTA05 MicrotargetingD2 DenyNaNNaNC00216 - Use advertiser controls to stem flow ...TA05Microtargeting
133C00217Registries alert when large batches of newsy U...daylightNaNNaNplatform_admingrugqNaNNaNTA07 Channel SelectionD2 DenyNaNNaNC00217 - Registries alert when large batches o...TA07Channel Selection
167C00218CensorshipremovalAlter and/or block the publication/disseminati...NaNplatform_admingrugqTaylor81NaNTA09 ExposureD2 DenyNaNNaNC00218 - CensorshipTA09Exposure
115C00219Add metadata to content - out of the control o...daylightNaNAdd date and source to imagesNaNgrugqNaNNaNTA06 Develop ContentD3 DisruptNaNNaNC00219 - Add metadata to content - out of the ...TA06Develop Content
\n", "

186 rows × 16 columns

\n", "
" ], "text/plain": [ " id name \\\n", "0 C00001 Better models of info spread up the layers \n", "1 C00003 How can we safeguard against extremists using ... \n", "2 C00004 Managing like a chronic disease \n", "3 C00005 Policy: makers, terminology, elements: a) broa... \n", "4 C00006 Charge for social media \n", ".. ... ... \n", "132 C00215 Use fraud legislation to clean up social media \n", "82 C00216 Use advertiser controls to stem flow of funds ... \n", "133 C00217 Registries alert when large batches of newsy U... \n", "167 C00218 Censorship \n", "115 C00219 Add metadata to content - out of the control o... \n", "\n", " metatechnique summary \\\n", "0 metatechnique NaN \n", "1 metatechnique NaN \n", "2 metatechnique NaN \n", "3 metatechnique NaN \n", "4 friction No corresponding AMITT technique. \n", ".. ... ... \n", "132 metatechnique NaN \n", "82 reduce resources NaN \n", "133 daylight NaN \n", "167 removal Alter and/or block the publication/disseminati... \n", "115 daylight NaN \n", "\n", " playbooks resources_needed \\\n", "0 NaN NaN \n", "1 NaN NaN \n", "2 NaN NaN \n", "3 NaN NaN \n", "4 NaN platform_admin:socialmedia \n", ".. ... ... \n", "132 NaN government:policymakers \n", "82 NaN platform_admin:adtech \n", "133 NaN platform_admin \n", "167 NaN platform_admin \n", "115 Add date and source to images NaN \n", "\n", " how_found references incident_ids tactic \\\n", "0 2019-11-workshop NaN NaN TA01 Strategic Planning \n", "1 2019-11-workshop NaN NaN TA01 Strategic Planning \n", "2 2019-11-workshop NaN NaN TA01 Strategic Planning \n", "3 2019-11-workshop NaN NaN TA01 Strategic Planning \n", "4 2019-11-workshop NaN NaN TA01 Strategic Planning \n", ".. ... ... ... ... \n", "132 2019-11-workshop NaN NaN TA07 Channel Selection \n", "82 2019-11-workshop NaN NaN TA05 Microtargeting \n", "133 grugq NaN NaN TA07 Channel Selection \n", "167 grugq Taylor81 NaN TA09 Exposure \n", "115 grugq NaN NaN TA06 Develop Content \n", "\n", " responsetype notes techniques \\\n", "0 ALL NaN NaN \n", "1 ALL NaN NaN \n", "2 ALL NaN NaN \n", "3 ALL NaN NaN \n", "4 D2 Deny NaN NaN \n", ".. ... ... ... \n", "132 D3 Disrupt NaN NaN \n", "82 D2 Deny NaN NaN \n", "133 D2 Deny NaN NaN \n", "167 D2 Deny NaN NaN \n", "115 D3 Disrupt NaN NaN \n", "\n", " longname tactic_id \\\n", "0 C00001 - Better models of info spread up the l... TA01 \n", "1 C00003 - How can we safeguard against extremis... TA01 \n", "2 C00004 - Managing like a chronic disease TA01 \n", "3 C00005 - Policy: makers, terminology, elements... TA01 \n", "4 C00006 - Charge for social media TA01 \n", ".. ... ... \n", "132 C00215 - Use fraud legislation to clean up soc... TA07 \n", "82 C00216 - Use advertiser controls to stem flow ... TA05 \n", "133 C00217 - Registries alert when large batches o... TA07 \n", "167 C00218 - Censorship TA09 \n", "115 C00219 - Add metadata to content - out of the ... TA06 \n", "\n", " tactic_name \n", "0 Strategic Planning \n", "1 Strategic Planning \n", "2 Strategic Planning \n", "3 Strategic Planning \n", "4 Strategic Planning \n", ".. ... \n", "132 Channel Selection \n", "82 Microtargeting \n", "133 Channel Selection \n", "167 Exposure \n", "115 Develop Content \n", "\n", "[186 rows x 16 columns]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "amitt.df_counters" ] }, { "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", "
idtechnique_id
6C00008T0006
12C00014T0006
21C00023T0006
22C00024T0006
23C00025T0006
35C00031T0006
100C00088T0006
\n", "
" ], "text/plain": [ " id technique_id\n", "6 C00008 T0006\n", "12 C00014 T0006\n", "21 C00023 T0006\n", "22 C00024 T0006\n", "23 C00025 T0006\n", "35 C00031 T0006\n", "100 C00088 T0006" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "amitt.cross_counterid_techniqueid[amitt.cross_counterid_techniqueid['technique_id'] == 'T0006']" ] }, { "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", " \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": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "amitt.cross_counterid_techniqueid" ] }, { "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", " \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_idname
0C00008T0006Create shared fact-checking database
1C00014T0006Real-time updates to fact-checking database
2C00023T0006Promote civility as an identity that people wi...
3C00024T0006Promote constructive narratives i.e. not polar...
4C00025T0006Promote identity neutral narratives
5C00031T0006Dilute the core narrative - create multiple pe...
6C00088T0006Poison pill recasting of message
\n", "
" ], "text/plain": [ " id technique_id name\n", "0 C00008 T0006 Create shared fact-checking database\n", "1 C00014 T0006 Real-time updates to fact-checking database\n", "2 C00023 T0006 Promote civility as an identity that people wi...\n", "3 C00024 T0006 Promote constructive narratives i.e. not polar...\n", "4 C00025 T0006 Promote identity neutral narratives\n", "5 C00031 T0006 Dilute the core narrative - create multiple pe...\n", "6 C00088 T0006 Poison pill recasting of message" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "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'])" ] } ], "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 }