cleaning visualisation code
Этот коммит содержится в:
родитель
f3336513cc
Коммит
9655db3401
Двоичные данные
AMITT_MASTER_DATA/AMITT_TTPs_MASTER.xlsx
Двоичные данные
AMITT_MASTER_DATA/AMITT_TTPs_MASTER.xlsx
Двоичный файл не отображается.
Двоичные данные
AMITT_MASTER_DATA/~$AMITT_TTPs_MASTER.xlsx
Обычный файл
Двоичные данные
AMITT_MASTER_DATA/~$AMITT_TTPs_MASTER.xlsx
Обычный файл
Двоичный файл не отображается.
@ -141,330 +141,6 @@
|
||||
"vars(amitt)['cross_counterid_techniqueid']"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"metadata": {
|
||||
"scrolled": true
|
||||
},
|
||||
"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>amitt_id</th>\n",
|
||||
" <th>technique_id</th>\n",
|
||||
" </tr>\n",
|
||||
" </thead>\n",
|
||||
" <tbody>\n",
|
||||
" <tr>\n",
|
||||
" <th>0</th>\n",
|
||||
" <td>C00006</td>\n",
|
||||
" <td>T0007</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>0</th>\n",
|
||||
" <td>C00006</td>\n",
|
||||
" <td>T0015</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>0</th>\n",
|
||||
" <td>C00006</td>\n",
|
||||
" <td>T0018</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>0</th>\n",
|
||||
" <td>C00006</td>\n",
|
||||
" <td>T0043</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>0</th>\n",
|
||||
" <td>C00006</td>\n",
|
||||
" <td>T0053</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>...</th>\n",
|
||||
" <td>...</td>\n",
|
||||
" <td>...</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>135</th>\n",
|
||||
" <td>C00219</td>\n",
|
||||
" <td>T0025</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>136</th>\n",
|
||||
" <td>C00220</td>\n",
|
||||
" <td></td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>137</th>\n",
|
||||
" <td>C00221</td>\n",
|
||||
" <td></td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>138</th>\n",
|
||||
" <td>C00222</td>\n",
|
||||
" <td></td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>139</th>\n",
|
||||
" <td>C00223</td>\n",
|
||||
" <td></td>\n",
|
||||
" </tr>\n",
|
||||
" </tbody>\n",
|
||||
"</table>\n",
|
||||
"<p>898 rows × 2 columns</p>\n",
|
||||
"</div>"
|
||||
],
|
||||
"text/plain": [
|
||||
" amitt_id technique_id\n",
|
||||
"0 C00006 T0007\n",
|
||||
"0 C00006 T0015\n",
|
||||
"0 C00006 T0018\n",
|
||||
"0 C00006 T0043\n",
|
||||
"0 C00006 T0053\n",
|
||||
".. ... ...\n",
|
||||
"135 C00219 T0025\n",
|
||||
"136 C00220 \n",
|
||||
"137 C00221 \n",
|
||||
"138 C00222 \n",
|
||||
"139 C00223 \n",
|
||||
"\n",
|
||||
"[898 rows x 2 columns]"
|
||||
]
|
||||
},
|
||||
"execution_count": 3,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"amitt.cross_counterid_techniqueid"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 10,
|
||||
"metadata": {
|
||||
"scrolled": true
|
||||
},
|
||||
"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>amitt_id</th>\n",
|
||||
" <th>tactic_id</th>\n",
|
||||
" <th>name</th>\n",
|
||||
" <th>summary</th>\n",
|
||||
" <th>id</th>\n",
|
||||
" </tr>\n",
|
||||
" </thead>\n",
|
||||
" <tbody>\n",
|
||||
" <tr>\n",
|
||||
" <th>0</th>\n",
|
||||
" <td>T0001</td>\n",
|
||||
" <td>TA01</td>\n",
|
||||
" <td>5Ds (dismiss, distort, distract, dismay, divide)</td>\n",
|
||||
" <td>Nimmo's \"4Ds of propaganda\": dismiss, distort,...</td>\n",
|
||||
" <td>1</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>1</th>\n",
|
||||
" <td>T0002</td>\n",
|
||||
" <td>TA01</td>\n",
|
||||
" <td>Facilitate State Propaganda</td>\n",
|
||||
" <td>Organize citizens around pro-state messaging. ...</td>\n",
|
||||
" <td>2</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>2</th>\n",
|
||||
" <td>T0003</td>\n",
|
||||
" <td>TA01</td>\n",
|
||||
" <td>Leverage Existing Narratives</td>\n",
|
||||
" <td>Use or adapt existing narrative themes, where ...</td>\n",
|
||||
" <td>3</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>3</th>\n",
|
||||
" <td>T0004</td>\n",
|
||||
" <td>TA01</td>\n",
|
||||
" <td>Competing Narratives</td>\n",
|
||||
" <td>Advance competing narratives connected to same...</td>\n",
|
||||
" <td>4</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>4</th>\n",
|
||||
" <td>T0005</td>\n",
|
||||
" <td>TA02</td>\n",
|
||||
" <td>Center of Gravity Analysis</td>\n",
|
||||
" <td>Recon/research to identify \"the source of powe...</td>\n",
|
||||
" <td>5</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>...</th>\n",
|
||||
" <td>...</td>\n",
|
||||
" <td>...</td>\n",
|
||||
" <td>...</td>\n",
|
||||
" <td>...</td>\n",
|
||||
" <td>...</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>59</th>\n",
|
||||
" <td>T0060</td>\n",
|
||||
" <td>TA11</td>\n",
|
||||
" <td>Continue to amplify</td>\n",
|
||||
" <td>continue narrative or message amplification af...</td>\n",
|
||||
" <td>60</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>60</th>\n",
|
||||
" <td>T0061</td>\n",
|
||||
" <td>TA10</td>\n",
|
||||
" <td>Sell merchandising</td>\n",
|
||||
" <td>Sell hats, t-shirts, flags and other branded c...</td>\n",
|
||||
" <td>61</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>61</th>\n",
|
||||
" <td>T0062</td>\n",
|
||||
" <td>TA12</td>\n",
|
||||
" <td>Behaviour changes</td>\n",
|
||||
" <td>Monitor and evaluate behaviour changes from mi...</td>\n",
|
||||
" <td>62</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>62</th>\n",
|
||||
" <td>T0063</td>\n",
|
||||
" <td>TA12</td>\n",
|
||||
" <td>Message reach</td>\n",
|
||||
" <td>Monitor and evaluate message reach in misinfor...</td>\n",
|
||||
" <td>63</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>63</th>\n",
|
||||
" <td>T0064</td>\n",
|
||||
" <td>TA12</td>\n",
|
||||
" <td>Social media engagement</td>\n",
|
||||
" <td>Monitor and evaluate social media engagement i...</td>\n",
|
||||
" <td>64</td>\n",
|
||||
" </tr>\n",
|
||||
" </tbody>\n",
|
||||
"</table>\n",
|
||||
"<p>64 rows × 5 columns</p>\n",
|
||||
"</div>"
|
||||
],
|
||||
"text/plain": [
|
||||
" amitt_id tactic_id name \\\n",
|
||||
"0 T0001 TA01 5Ds (dismiss, distort, distract, dismay, divide) \n",
|
||||
"1 T0002 TA01 Facilitate State Propaganda \n",
|
||||
"2 T0003 TA01 Leverage Existing Narratives \n",
|
||||
"3 T0004 TA01 Competing Narratives \n",
|
||||
"4 T0005 TA02 Center of Gravity Analysis \n",
|
||||
".. ... ... ... \n",
|
||||
"59 T0060 TA11 Continue to amplify \n",
|
||||
"60 T0061 TA10 Sell merchandising \n",
|
||||
"61 T0062 TA12 Behaviour changes \n",
|
||||
"62 T0063 TA12 Message reach \n",
|
||||
"63 T0064 TA12 Social media engagement \n",
|
||||
"\n",
|
||||
" summary id \n",
|
||||
"0 Nimmo's \"4Ds of propaganda\": dismiss, distort,... 1 \n",
|
||||
"1 Organize citizens around pro-state messaging. ... 2 \n",
|
||||
"2 Use or adapt existing narrative themes, where ... 3 \n",
|
||||
"3 Advance competing narratives connected to same... 4 \n",
|
||||
"4 Recon/research to identify \"the source of powe... 5 \n",
|
||||
".. ... .. \n",
|
||||
"59 continue narrative or message amplification af... 60 \n",
|
||||
"60 Sell hats, t-shirts, flags and other branded c... 61 \n",
|
||||
"61 Monitor and evaluate behaviour changes from mi... 62 \n",
|
||||
"62 Monitor and evaluate message reach in misinfor... 63 \n",
|
||||
"63 Monitor and evaluate social media engagement i... 64 \n",
|
||||
"\n",
|
||||
"[64 rows x 5 columns]"
|
||||
]
|
||||
},
|
||||
"execution_count": 10,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"# Generate minimal sqlite database from the Amitt variables\n",
|
||||
"conn = sql.connect('amittsite.sqlite')\n",
|
||||
"\n",
|
||||
"def add_table(dataframe, tablename, columns): \n",
|
||||
" # Create sql table\n",
|
||||
" colnames = ', '.join(['{} TEXT NOT NULL'.format(col) for col in columns])\n",
|
||||
" conn.execute(\"DROP TABLE IF EXISTS {}\".format(tablename))\n",
|
||||
" conn.execute('''CREATE TABLE {} (id INTEGER PRIMARY KEY AUTOINCREMENT, {});'''.format(tablename, colnames))\n",
|
||||
" #populate table from dataframe\n",
|
||||
" newtable = dataframe[columns].copy().applymap(str)\n",
|
||||
" newtable['id'] = range(1,len(newtable)+1)\n",
|
||||
" newtable.to_sql(tablename, conn, index=False, if_exists='append')\n",
|
||||
" conn.commit()\n",
|
||||
" return newtable\n",
|
||||
"\n",
|
||||
"#newtable = add_table(amitt.df_actortypes, 'actor_type', ['amitt_id', 'sector_id', 'framework_id', 'name', 'summary'])\n",
|
||||
"# counter\n",
|
||||
"newtable = add_table(amitt.df_counters, 'counter', ['amitt_id', 'tactic_id', 'metatechnique_id', 'name', 'summary'])\n",
|
||||
"# dataset\n",
|
||||
"newtable = add_table(amitt.df_frameworks, 'framework', ['amitt_id', 'name', 'summary'])\n",
|
||||
"# incident\n",
|
||||
"# metatechnique\n",
|
||||
"newtable = add_table(amitt.df_metatechniques, 'metatechnique', ['amitt_id', 'name', 'summary'])\n",
|
||||
"newtable = add_table(amitt.df_phases, 'phase', ['amitt_id', 'name', 'rank', 'summary'])\n",
|
||||
"# playbook\n",
|
||||
"# reference\n",
|
||||
"# response_type\n",
|
||||
"# sector\n",
|
||||
"newtable = add_table(amitt.df_tactics, 'tactic', ['amitt_id', 'phase_id', 'name', 'rank', 'summary'])\n",
|
||||
"newtable = add_table(amitt.df_tasks, 'task', ['amitt_id', 'tactic_id', 'framework_id', 'name', 'summary'])\n",
|
||||
"newtable = add_table(amitt.df_techniques, 'technique', ['amitt_id', 'tactic_id', 'name', 'summary'])\n",
|
||||
"# techniques_counters\n",
|
||||
"\n",
|
||||
"conn.execute(\"DROP TABLE IF EXISTS {}\".format('user'))\n",
|
||||
"conn.execute('''CREATE TABLE user (id INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT NOT NULL UNIQUE, password TEXT NOT NULL);''')\n",
|
||||
"\n",
|
||||
"conn.close()\n",
|
||||
"newtable"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 26,
|
||||
@ -771,7 +447,9 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# fix the problem with excelfile changes"
|
||||
"# fix the problem with excelfile changes\n",
|
||||
"\n",
|
||||
"Background: AMITT's master dataset is in an excelfile. Changes in this dont' show up in github, so it's difficult to tell what's changed between versions. Code below checks for those differences - use this repeatedly until versions align. "
|
||||
]
|
||||
},
|
||||
{
|
||||
|
||||
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
@ -141,330 +141,6 @@
|
||||
"vars(amitt)['cross_counterid_techniqueid']"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"metadata": {
|
||||
"scrolled": true
|
||||
},
|
||||
"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>amitt_id</th>\n",
|
||||
" <th>technique_id</th>\n",
|
||||
" </tr>\n",
|
||||
" </thead>\n",
|
||||
" <tbody>\n",
|
||||
" <tr>\n",
|
||||
" <th>0</th>\n",
|
||||
" <td>C00006</td>\n",
|
||||
" <td>T0007</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>0</th>\n",
|
||||
" <td>C00006</td>\n",
|
||||
" <td>T0015</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>0</th>\n",
|
||||
" <td>C00006</td>\n",
|
||||
" <td>T0018</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>0</th>\n",
|
||||
" <td>C00006</td>\n",
|
||||
" <td>T0043</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>0</th>\n",
|
||||
" <td>C00006</td>\n",
|
||||
" <td>T0053</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>...</th>\n",
|
||||
" <td>...</td>\n",
|
||||
" <td>...</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>135</th>\n",
|
||||
" <td>C00219</td>\n",
|
||||
" <td>T0025</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>136</th>\n",
|
||||
" <td>C00220</td>\n",
|
||||
" <td></td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>137</th>\n",
|
||||
" <td>C00221</td>\n",
|
||||
" <td></td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>138</th>\n",
|
||||
" <td>C00222</td>\n",
|
||||
" <td></td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>139</th>\n",
|
||||
" <td>C00223</td>\n",
|
||||
" <td></td>\n",
|
||||
" </tr>\n",
|
||||
" </tbody>\n",
|
||||
"</table>\n",
|
||||
"<p>898 rows × 2 columns</p>\n",
|
||||
"</div>"
|
||||
],
|
||||
"text/plain": [
|
||||
" amitt_id technique_id\n",
|
||||
"0 C00006 T0007\n",
|
||||
"0 C00006 T0015\n",
|
||||
"0 C00006 T0018\n",
|
||||
"0 C00006 T0043\n",
|
||||
"0 C00006 T0053\n",
|
||||
".. ... ...\n",
|
||||
"135 C00219 T0025\n",
|
||||
"136 C00220 \n",
|
||||
"137 C00221 \n",
|
||||
"138 C00222 \n",
|
||||
"139 C00223 \n",
|
||||
"\n",
|
||||
"[898 rows x 2 columns]"
|
||||
]
|
||||
},
|
||||
"execution_count": 3,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"amitt.cross_counterid_techniqueid"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 10,
|
||||
"metadata": {
|
||||
"scrolled": true
|
||||
},
|
||||
"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>amitt_id</th>\n",
|
||||
" <th>tactic_id</th>\n",
|
||||
" <th>name</th>\n",
|
||||
" <th>summary</th>\n",
|
||||
" <th>id</th>\n",
|
||||
" </tr>\n",
|
||||
" </thead>\n",
|
||||
" <tbody>\n",
|
||||
" <tr>\n",
|
||||
" <th>0</th>\n",
|
||||
" <td>T0001</td>\n",
|
||||
" <td>TA01</td>\n",
|
||||
" <td>5Ds (dismiss, distort, distract, dismay, divide)</td>\n",
|
||||
" <td>Nimmo's \"4Ds of propaganda\": dismiss, distort,...</td>\n",
|
||||
" <td>1</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>1</th>\n",
|
||||
" <td>T0002</td>\n",
|
||||
" <td>TA01</td>\n",
|
||||
" <td>Facilitate State Propaganda</td>\n",
|
||||
" <td>Organize citizens around pro-state messaging. ...</td>\n",
|
||||
" <td>2</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>2</th>\n",
|
||||
" <td>T0003</td>\n",
|
||||
" <td>TA01</td>\n",
|
||||
" <td>Leverage Existing Narratives</td>\n",
|
||||
" <td>Use or adapt existing narrative themes, where ...</td>\n",
|
||||
" <td>3</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>3</th>\n",
|
||||
" <td>T0004</td>\n",
|
||||
" <td>TA01</td>\n",
|
||||
" <td>Competing Narratives</td>\n",
|
||||
" <td>Advance competing narratives connected to same...</td>\n",
|
||||
" <td>4</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>4</th>\n",
|
||||
" <td>T0005</td>\n",
|
||||
" <td>TA02</td>\n",
|
||||
" <td>Center of Gravity Analysis</td>\n",
|
||||
" <td>Recon/research to identify \"the source of powe...</td>\n",
|
||||
" <td>5</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>...</th>\n",
|
||||
" <td>...</td>\n",
|
||||
" <td>...</td>\n",
|
||||
" <td>...</td>\n",
|
||||
" <td>...</td>\n",
|
||||
" <td>...</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>59</th>\n",
|
||||
" <td>T0060</td>\n",
|
||||
" <td>TA11</td>\n",
|
||||
" <td>Continue to amplify</td>\n",
|
||||
" <td>continue narrative or message amplification af...</td>\n",
|
||||
" <td>60</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>60</th>\n",
|
||||
" <td>T0061</td>\n",
|
||||
" <td>TA10</td>\n",
|
||||
" <td>Sell merchandising</td>\n",
|
||||
" <td>Sell hats, t-shirts, flags and other branded c...</td>\n",
|
||||
" <td>61</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>61</th>\n",
|
||||
" <td>T0062</td>\n",
|
||||
" <td>TA12</td>\n",
|
||||
" <td>Behaviour changes</td>\n",
|
||||
" <td>Monitor and evaluate behaviour changes from mi...</td>\n",
|
||||
" <td>62</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>62</th>\n",
|
||||
" <td>T0063</td>\n",
|
||||
" <td>TA12</td>\n",
|
||||
" <td>Message reach</td>\n",
|
||||
" <td>Monitor and evaluate message reach in misinfor...</td>\n",
|
||||
" <td>63</td>\n",
|
||||
" </tr>\n",
|
||||
" <tr>\n",
|
||||
" <th>63</th>\n",
|
||||
" <td>T0064</td>\n",
|
||||
" <td>TA12</td>\n",
|
||||
" <td>Social media engagement</td>\n",
|
||||
" <td>Monitor and evaluate social media engagement i...</td>\n",
|
||||
" <td>64</td>\n",
|
||||
" </tr>\n",
|
||||
" </tbody>\n",
|
||||
"</table>\n",
|
||||
"<p>64 rows × 5 columns</p>\n",
|
||||
"</div>"
|
||||
],
|
||||
"text/plain": [
|
||||
" amitt_id tactic_id name \\\n",
|
||||
"0 T0001 TA01 5Ds (dismiss, distort, distract, dismay, divide) \n",
|
||||
"1 T0002 TA01 Facilitate State Propaganda \n",
|
||||
"2 T0003 TA01 Leverage Existing Narratives \n",
|
||||
"3 T0004 TA01 Competing Narratives \n",
|
||||
"4 T0005 TA02 Center of Gravity Analysis \n",
|
||||
".. ... ... ... \n",
|
||||
"59 T0060 TA11 Continue to amplify \n",
|
||||
"60 T0061 TA10 Sell merchandising \n",
|
||||
"61 T0062 TA12 Behaviour changes \n",
|
||||
"62 T0063 TA12 Message reach \n",
|
||||
"63 T0064 TA12 Social media engagement \n",
|
||||
"\n",
|
||||
" summary id \n",
|
||||
"0 Nimmo's \"4Ds of propaganda\": dismiss, distort,... 1 \n",
|
||||
"1 Organize citizens around pro-state messaging. ... 2 \n",
|
||||
"2 Use or adapt existing narrative themes, where ... 3 \n",
|
||||
"3 Advance competing narratives connected to same... 4 \n",
|
||||
"4 Recon/research to identify \"the source of powe... 5 \n",
|
||||
".. ... .. \n",
|
||||
"59 continue narrative or message amplification af... 60 \n",
|
||||
"60 Sell hats, t-shirts, flags and other branded c... 61 \n",
|
||||
"61 Monitor and evaluate behaviour changes from mi... 62 \n",
|
||||
"62 Monitor and evaluate message reach in misinfor... 63 \n",
|
||||
"63 Monitor and evaluate social media engagement i... 64 \n",
|
||||
"\n",
|
||||
"[64 rows x 5 columns]"
|
||||
]
|
||||
},
|
||||
"execution_count": 10,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"# Generate minimal sqlite database from the Amitt variables\n",
|
||||
"conn = sql.connect('amittsite.sqlite')\n",
|
||||
"\n",
|
||||
"def add_table(dataframe, tablename, columns): \n",
|
||||
" # Create sql table\n",
|
||||
" colnames = ', '.join(['{} TEXT NOT NULL'.format(col) for col in columns])\n",
|
||||
" conn.execute(\"DROP TABLE IF EXISTS {}\".format(tablename))\n",
|
||||
" conn.execute('''CREATE TABLE {} (id INTEGER PRIMARY KEY AUTOINCREMENT, {});'''.format(tablename, colnames))\n",
|
||||
" #populate table from dataframe\n",
|
||||
" newtable = dataframe[columns].copy().applymap(str)\n",
|
||||
" newtable['id'] = range(1,len(newtable)+1)\n",
|
||||
" newtable.to_sql(tablename, conn, index=False, if_exists='append')\n",
|
||||
" conn.commit()\n",
|
||||
" return newtable\n",
|
||||
"\n",
|
||||
"#newtable = add_table(amitt.df_actortypes, 'actor_type', ['amitt_id', 'sector_id', 'framework_id', 'name', 'summary'])\n",
|
||||
"# counter\n",
|
||||
"newtable = add_table(amitt.df_counters, 'counter', ['amitt_id', 'tactic_id', 'metatechnique_id', 'name', 'summary'])\n",
|
||||
"# dataset\n",
|
||||
"newtable = add_table(amitt.df_frameworks, 'framework', ['amitt_id', 'name', 'summary'])\n",
|
||||
"# incident\n",
|
||||
"# metatechnique\n",
|
||||
"newtable = add_table(amitt.df_metatechniques, 'metatechnique', ['amitt_id', 'name', 'summary'])\n",
|
||||
"newtable = add_table(amitt.df_phases, 'phase', ['amitt_id', 'name', 'rank', 'summary'])\n",
|
||||
"# playbook\n",
|
||||
"# reference\n",
|
||||
"# response_type\n",
|
||||
"# sector\n",
|
||||
"newtable = add_table(amitt.df_tactics, 'tactic', ['amitt_id', 'phase_id', 'name', 'rank', 'summary'])\n",
|
||||
"newtable = add_table(amitt.df_tasks, 'task', ['amitt_id', 'tactic_id', 'framework_id', 'name', 'summary'])\n",
|
||||
"newtable = add_table(amitt.df_techniques, 'technique', ['amitt_id', 'tactic_id', 'name', 'summary'])\n",
|
||||
"# techniques_counters\n",
|
||||
"\n",
|
||||
"conn.execute(\"DROP TABLE IF EXISTS {}\".format('user'))\n",
|
||||
"conn.execute('''CREATE TABLE user (id INTEGER PRIMARY KEY AUTOINCREMENT, username TEXT NOT NULL UNIQUE, password TEXT NOT NULL);''')\n",
|
||||
"\n",
|
||||
"conn.close()\n",
|
||||
"newtable"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 26,
|
||||
@ -771,7 +447,9 @@
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# fix the problem with excelfile changes"
|
||||
"# fix the problem with excelfile changes\n",
|
||||
"\n",
|
||||
"Background: AMITT's master dataset is in an excelfile. Changes in this dont' show up in github, so it's difficult to tell what's changed between versions. Code below checks for those differences - use this repeatedly until versions align. "
|
||||
]
|
||||
},
|
||||
{
|
||||
|
||||
13252
HTML_GENERATING_CODE/AMITT_create_website_sql.ipynb
Обычный файл
13252
HTML_GENERATING_CODE/AMITT_create_website_sql.ipynb
Обычный файл
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
Двоичные данные
HTML_GENERATING_CODE/amittsite.sqlite
Обычный файл
Двоичные данные
HTML_GENERATING_CODE/amittsite.sqlite
Обычный файл
Двоичный файл не отображается.
@ -4,7 +4,6 @@ var gridnames = ["#bluegrid", "#redgrid"];
|
||||
for (gridname in gridnames) {
|
||||
fillGrid(gridname)
|
||||
}
|
||||
|
||||
function fillGrid(gridname) {
|
||||
|
||||
|
||||
|
||||
@ -4,11 +4,11 @@
|
||||
</head>
|
||||
<body>
|
||||
<H2>AMITT Red TTPs (techniques)</H2>
|
||||
<div id="bluegrid"></div>
|
||||
|
||||
<H2>AMITT Blue TTPs (counters)</H2>
|
||||
<div id="redgrid"></div>
|
||||
|
||||
<!-- <H2>AMITT Blue TTPs (counters)</H2>
|
||||
<div id="bluegrid"></div>
|
||||
-->
|
||||
<script src="grid.js" type="text/javascript"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Загрузка…
x
Ссылка в новой задаче
Block a user