1853 строки
62 KiB
Plaintext
1853 строки
62 KiB
Plaintext
{
|
||
"cells": [
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 1,
|
||
"metadata": {
|
||
"scrolled": true
|
||
},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
"updated ../amitt_red_framework.md\n",
|
||
"updated ../amitt_blue_framework.md\n",
|
||
"updated ../amitt_red_framework_clickable.html\n",
|
||
"updated ../phases_index.md\n",
|
||
"updated ../tactics_index.md\n",
|
||
"updated ../techniques_index.md\n",
|
||
"updated ../tasks_index.md\n",
|
||
"updated ../incidents_index.md\n",
|
||
"updated ../counters_index.md\n",
|
||
"updated ../metatechniques_index.md\n",
|
||
"updated ../actors_index.md\n",
|
||
"updated ../responsetype_index.md\n",
|
||
"updated ../detections_index.md\n",
|
||
"updated ../tactics_by_responsetype_table.md\n",
|
||
"updated ../metatechniques_by_responsetype_table.md\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"import pandas as pd\n",
|
||
"from generate_amitt_ttps import Amitt\n",
|
||
"amitt = Amitt()\n",
|
||
"amitt.generate_and_write_datafiles()"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": null,
|
||
"metadata": {},
|
||
"outputs": [],
|
||
"source": [
|
||
"# Check which amitt variables we can see from here\n",
|
||
"print('{}'.format(vars(amitt).keys()))\n",
|
||
"vars(amitt)['tactics']"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "markdown",
|
||
"metadata": {},
|
||
"source": [
|
||
"# TEST AREA"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 3,
|
||
"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 tr th {\n",
|
||
" text-align: left;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead tr:last-of-type th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr>\n",
|
||
" <th></th>\n",
|
||
" <th colspan=\"12\" halign=\"left\">id</th>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>tactic_id</th>\n",
|
||
" <th>TA01</th>\n",
|
||
" <th>TA02</th>\n",
|
||
" <th>TA03</th>\n",
|
||
" <th>TA04</th>\n",
|
||
" <th>TA05</th>\n",
|
||
" <th>TA06</th>\n",
|
||
" <th>TA07</th>\n",
|
||
" <th>TA08</th>\n",
|
||
" <th>TA09</th>\n",
|
||
" <th>TA10</th>\n",
|
||
" <th>TA11</th>\n",
|
||
" <th>TA12</th>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>responsetype</th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>ALL</th>\n",
|
||
" <td>4</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>D2 Deny</th>\n",
|
||
" <td>11</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>10</td>\n",
|
||
" <td>11</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>13</td>\n",
|
||
" <td>7</td>\n",
|
||
" <td>7</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>D3 Disrupt</th>\n",
|
||
" <td>6</td>\n",
|
||
" <td>5</td>\n",
|
||
" <td>7</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>5</td>\n",
|
||
" <td>8</td>\n",
|
||
" <td>7</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>14</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>6</td>\n",
|
||
" <td>1</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>D4 Degrade</th>\n",
|
||
" <td>7</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>5</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>6</td>\n",
|
||
" <td>2</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>D5 Deceive</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>D6 Destroy</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>D7 Deter</th>\n",
|
||
" <td>4</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>5</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" id \n",
|
||
"tactic_id TA01 TA02 TA03 TA04 TA05 TA06 TA07 TA08 TA09 TA10 TA11 TA12\n",
|
||
"responsetype \n",
|
||
"ALL 4 0 0 0 0 0 0 0 0 0 0 0\n",
|
||
"D2 Deny 11 0 10 11 2 13 7 7 3 1 1 0\n",
|
||
"D3 Disrupt 6 5 7 3 5 8 7 3 14 0 6 1\n",
|
||
"D4 Degrade 7 0 1 3 0 5 3 2 2 0 6 2\n",
|
||
"D5 Deceive 0 0 1 0 0 2 1 0 0 0 0 0\n",
|
||
"D6 Destroy 0 0 1 1 0 0 0 0 0 0 0 0\n",
|
||
"D7 Deter 4 0 1 0 0 5 0 3 0 1 0 0"
|
||
]
|
||
},
|
||
"execution_count": 3,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"import pandas as pd\n",
|
||
"counts_table = pd.pivot_table(amitt.df_counters[['tactic_id', 'responsetype',\n",
|
||
" 'id']], index='responsetype', columns='tactic_id', aggfunc=len, fill_value=0)\n",
|
||
"counts_table"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 4,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"Index(['TA01', 'TA02', 'TA03', 'TA04', 'TA05', 'TA06', 'TA07', 'TA08', 'TA09',\n",
|
||
" 'TA10', 'TA11', 'TA12'],\n",
|
||
" dtype='object', name='tactic_id')"
|
||
]
|
||
},
|
||
"execution_count": 4,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"counts_table.columns.get_level_values(1)"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 7,
|
||
"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 tr th {\n",
|
||
" text-align: left;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead tr:last-of-type th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr>\n",
|
||
" <th></th>\n",
|
||
" <th colspan=\"7\" halign=\"left\">id</th>\n",
|
||
" <th>TOTALS</th>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>responsetype</th>\n",
|
||
" <th>ALL</th>\n",
|
||
" <th>D2 Deny</th>\n",
|
||
" <th>D3 Disrupt</th>\n",
|
||
" <th>D4 Degrade</th>\n",
|
||
" <th>D5 Deceive</th>\n",
|
||
" <th>D6 Destroy</th>\n",
|
||
" <th>D7 Deter</th>\n",
|
||
" <th></th>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>metatechnique_id</th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>M001</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>10</td>\n",
|
||
" <td>7</td>\n",
|
||
" <td>7</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>4</td>\n",
|
||
" <td>28</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>M002</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>10</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>17</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>M003</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>6</td>\n",
|
||
" <td>8</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>19</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>M004</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>13</td>\n",
|
||
" <td>7</td>\n",
|
||
" <td>6</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>26</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>M005</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>15</td>\n",
|
||
" <td>4</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>19</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>M006</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>7</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>10</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>M007</th>\n",
|
||
" <td>4</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>6</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>16</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>M008</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>4</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>6</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>M009</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>5</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>6</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>M010</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>8</td>\n",
|
||
" <td>4</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>17</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>M011</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>3</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>M012</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>4</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>M013</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>6</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>11</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>M014</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>4</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" id \\\n",
|
||
"responsetype ALL D2 Deny D3 Disrupt D4 Degrade D5 Deceive D6 Destroy \n",
|
||
"metatechnique_id \n",
|
||
"M001 0 10 7 7 0 0 \n",
|
||
"M002 0 2 10 2 3 0 \n",
|
||
"M003 0 6 8 2 0 1 \n",
|
||
"M004 0 13 7 6 0 0 \n",
|
||
"M005 0 15 4 0 0 0 \n",
|
||
"M006 0 7 0 0 0 0 \n",
|
||
"M007 4 3 6 0 0 0 \n",
|
||
"M008 0 0 1 4 1 0 \n",
|
||
"M009 0 0 5 1 0 0 \n",
|
||
"M010 0 3 8 4 0 1 \n",
|
||
"M011 0 2 1 0 0 0 \n",
|
||
"M012 0 2 1 1 0 0 \n",
|
||
"M013 0 1 6 3 0 0 \n",
|
||
"M014 0 2 1 1 0 0 \n",
|
||
"\n",
|
||
" TOTALS \n",
|
||
"responsetype D7 Deter \n",
|
||
"metatechnique_id \n",
|
||
"M001 4 28 \n",
|
||
"M002 0 17 \n",
|
||
"M003 2 19 \n",
|
||
"M004 0 26 \n",
|
||
"M005 0 19 \n",
|
||
"M006 3 10 \n",
|
||
"M007 3 16 \n",
|
||
"M008 0 6 \n",
|
||
"M009 0 6 \n",
|
||
"M010 1 17 \n",
|
||
"M011 0 3 \n",
|
||
"M012 0 4 \n",
|
||
"M013 1 11 \n",
|
||
"M014 0 4 "
|
||
]
|
||
},
|
||
"execution_count": 7,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"coltype = 'responsetype'\n",
|
||
"rowtype = 'metatechnique_id'\n",
|
||
"rowname = 'metatag'\n",
|
||
"counts_table2 = pd.pivot_table(amitt.df_counters[[coltype, rowtype,'id']], \n",
|
||
" index=rowtype, columns=coltype, aggfunc=len, \n",
|
||
" fill_value=0) \n",
|
||
"counts_table2['TOTALS'] = counts_table2.sum(axis=1)\n",
|
||
"counts_table2"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 8,
|
||
"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 tr th {\n",
|
||
" text-align: left;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead tr:last-of-type th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr>\n",
|
||
" <th></th>\n",
|
||
" <th colspan=\"7\" halign=\"left\">id</th>\n",
|
||
" <th>TOTALS</th>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>responsetype</th>\n",
|
||
" <th>ALL</th>\n",
|
||
" <th>D2 Deny</th>\n",
|
||
" <th>D3 Disrupt</th>\n",
|
||
" <th>D4 Degrade</th>\n",
|
||
" <th>D5 Deceive</th>\n",
|
||
" <th>D6 Destroy</th>\n",
|
||
" <th>D7 Deter</th>\n",
|
||
" <th></th>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>tactic_id</th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>TA01</th>\n",
|
||
" <td>4</td>\n",
|
||
" <td>11</td>\n",
|
||
" <td>6</td>\n",
|
||
" <td>7</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>4</td>\n",
|
||
" <td>32</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>TA02</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>5</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>5</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>TA03</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>10</td>\n",
|
||
" <td>7</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>21</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>TA04</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>11</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>18</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>TA05</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>5</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>7</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>TA06</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>13</td>\n",
|
||
" <td>8</td>\n",
|
||
" <td>5</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>5</td>\n",
|
||
" <td>33</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>TA07</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>7</td>\n",
|
||
" <td>7</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>18</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>TA08</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>7</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>15</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>TA09</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>14</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>19</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>TA10</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>2</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>TA11</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>6</td>\n",
|
||
" <td>6</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>13</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>TA12</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>3</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" id \\\n",
|
||
"responsetype ALL D2 Deny D3 Disrupt D4 Degrade D5 Deceive D6 Destroy D7 Deter \n",
|
||
"tactic_id \n",
|
||
"TA01 4 11 6 7 0 0 4 \n",
|
||
"TA02 0 0 5 0 0 0 0 \n",
|
||
"TA03 0 10 7 1 1 1 1 \n",
|
||
"TA04 0 11 3 3 0 1 0 \n",
|
||
"TA05 0 2 5 0 0 0 0 \n",
|
||
"TA06 0 13 8 5 2 0 5 \n",
|
||
"TA07 0 7 7 3 1 0 0 \n",
|
||
"TA08 0 7 3 2 0 0 3 \n",
|
||
"TA09 0 3 14 2 0 0 0 \n",
|
||
"TA10 0 1 0 0 0 0 1 \n",
|
||
"TA11 0 1 6 6 0 0 0 \n",
|
||
"TA12 0 0 1 2 0 0 0 \n",
|
||
"\n",
|
||
" TOTALS \n",
|
||
"responsetype \n",
|
||
"tactic_id \n",
|
||
"TA01 32 \n",
|
||
"TA02 5 \n",
|
||
"TA03 21 \n",
|
||
"TA04 18 \n",
|
||
"TA05 7 \n",
|
||
"TA06 33 \n",
|
||
"TA07 18 \n",
|
||
"TA08 15 \n",
|
||
"TA09 19 \n",
|
||
"TA10 2 \n",
|
||
"TA11 13 \n",
|
||
"TA12 3 "
|
||
]
|
||
},
|
||
"execution_count": 8,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"coltype = 'responsetype'\n",
|
||
"rowtype = 'tactic_id'\n",
|
||
"rowname = 'tacctic'\n",
|
||
"counts_table3 = pd.pivot_table(amitt.df_counters[[coltype, rowtype,'id']], \n",
|
||
" index=rowtype, columns=coltype, aggfunc=len, \n",
|
||
" fill_value=0) \n",
|
||
"counts_table3['TOTALS'] = counts_table3.sum(axis=1)\n",
|
||
"counts_table3"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 12,
|
||
"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 tr th {\n",
|
||
" text-align: left;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead tr:last-of-type th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr>\n",
|
||
" <th></th>\n",
|
||
" <th colspan=\"7\" halign=\"left\">id</th>\n",
|
||
" <th>TOTALS</th>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>responsetype</th>\n",
|
||
" <th>ALL</th>\n",
|
||
" <th>D2 Deny</th>\n",
|
||
" <th>D3 Disrupt</th>\n",
|
||
" <th>D4 Degrade</th>\n",
|
||
" <th>D5 Deceive</th>\n",
|
||
" <th>D6 Destroy</th>\n",
|
||
" <th>D7 Deter</th>\n",
|
||
" <th></th>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>metatechnique_id</th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>M001</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>10</td>\n",
|
||
" <td>7</td>\n",
|
||
" <td>7</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>4</td>\n",
|
||
" <td>28</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>M002</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>10</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>17</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>M003</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>6</td>\n",
|
||
" <td>8</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>19</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>M004</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>13</td>\n",
|
||
" <td>7</td>\n",
|
||
" <td>6</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>26</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>M005</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>15</td>\n",
|
||
" <td>4</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>19</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>M006</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>7</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>10</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>M007</th>\n",
|
||
" <td>4</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>6</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>16</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>M008</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>4</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>6</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>M009</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>5</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>6</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>M010</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>8</td>\n",
|
||
" <td>4</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>17</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>M011</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>3</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>M012</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>4</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>M013</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>6</td>\n",
|
||
" <td>3</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>11</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>M014</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>4</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" id \\\n",
|
||
"responsetype ALL D2 Deny D3 Disrupt D4 Degrade D5 Deceive D6 Destroy \n",
|
||
"metatechnique_id \n",
|
||
"M001 0 10 7 7 0 0 \n",
|
||
"M002 0 2 10 2 3 0 \n",
|
||
"M003 0 6 8 2 0 1 \n",
|
||
"M004 0 13 7 6 0 0 \n",
|
||
"M005 0 15 4 0 0 0 \n",
|
||
"M006 0 7 0 0 0 0 \n",
|
||
"M007 4 3 6 0 0 0 \n",
|
||
"M008 0 0 1 4 1 0 \n",
|
||
"M009 0 0 5 1 0 0 \n",
|
||
"M010 0 3 8 4 0 1 \n",
|
||
"M011 0 2 1 0 0 0 \n",
|
||
"M012 0 2 1 1 0 0 \n",
|
||
"M013 0 1 6 3 0 0 \n",
|
||
"M014 0 2 1 1 0 0 \n",
|
||
"\n",
|
||
" TOTALS \n",
|
||
"responsetype D7 Deter \n",
|
||
"metatechnique_id \n",
|
||
"M001 4 28 \n",
|
||
"M002 0 17 \n",
|
||
"M003 2 19 \n",
|
||
"M004 0 26 \n",
|
||
"M005 0 19 \n",
|
||
"M006 3 10 \n",
|
||
"M007 3 16 \n",
|
||
"M008 0 6 \n",
|
||
"M009 0 6 \n",
|
||
"M010 1 17 \n",
|
||
"M011 0 3 \n",
|
||
"M012 0 4 \n",
|
||
"M013 1 11 \n",
|
||
"M014 0 4 "
|
||
]
|
||
},
|
||
"execution_count": 12,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"counts_table4 = pd.pivot_table(amitt.df_counters[['responsetype', 'metatechnique_id','id']], \n",
|
||
" index='metatechnique_id', columns='responsetype', aggfunc=len, \n",
|
||
" fill_value=0) \n",
|
||
"counts_table4['TOTALS'] = counts_table4.sum(axis=1)\n",
|
||
"counts_table4"
|
||
]
|
||
},
|
||
{
|
||
"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>id</th>\n",
|
||
" <th>name</th>\n",
|
||
" <th>metatechnique</th>\n",
|
||
" <th>summary</th>\n",
|
||
" <th>playbooks</th>\n",
|
||
" <th>actors</th>\n",
|
||
" <th>resources_needed</th>\n",
|
||
" <th>how_found</th>\n",
|
||
" <th>references</th>\n",
|
||
" <th>incident_ids</th>\n",
|
||
" <th>tactic</th>\n",
|
||
" <th>responsetype</th>\n",
|
||
" <th>notes</th>\n",
|
||
" <th>techniques</th>\n",
|
||
" <th>longname</th>\n",
|
||
" <th>tactic_id</th>\n",
|
||
" <th>tactic_name</th>\n",
|
||
" <th>metatechnique_id</th>\n",
|
||
" <th>metatechnique_name</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th>67</th>\n",
|
||
" <td>C00001</td>\n",
|
||
" <td>Better models of info spread up the layers</td>\n",
|
||
" <td>M007 - metatechnique</td>\n",
|
||
" <td></td>\n",
|
||
" <td></td>\n",
|
||
" <td></td>\n",
|
||
" <td></td>\n",
|
||
" <td>2019-11-workshop</td>\n",
|
||
" <td></td>\n",
|
||
" <td></td>\n",
|
||
" <td>TA01 Strategic Planning</td>\n",
|
||
" <td>ALL</td>\n",
|
||
" <td></td>\n",
|
||
" <td></td>\n",
|
||
" <td>C00001 - Better models of info spread up the l...</td>\n",
|
||
" <td>TA01</td>\n",
|
||
" <td>Strategic Planning</td>\n",
|
||
" <td>M007</td>\n",
|
||
" <td>- metatechnique</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>68</th>\n",
|
||
" <td>C00003</td>\n",
|
||
" <td>How can we safeguard against extremists using ...</td>\n",
|
||
" <td>M007 - metatechnique</td>\n",
|
||
" <td></td>\n",
|
||
" <td></td>\n",
|
||
" <td></td>\n",
|
||
" <td></td>\n",
|
||
" <td>2019-11-workshop</td>\n",
|
||
" <td></td>\n",
|
||
" <td></td>\n",
|
||
" <td>TA01 Strategic Planning</td>\n",
|
||
" <td>ALL</td>\n",
|
||
" <td></td>\n",
|
||
" <td></td>\n",
|
||
" <td>C00003 - How can we safeguard against extremis...</td>\n",
|
||
" <td>TA01</td>\n",
|
||
" <td>Strategic Planning</td>\n",
|
||
" <td>M007</td>\n",
|
||
" <td>- metatechnique</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>69</th>\n",
|
||
" <td>C00004</td>\n",
|
||
" <td>Managing like a chronic disease</td>\n",
|
||
" <td>M007 - metatechnique</td>\n",
|
||
" <td></td>\n",
|
||
" <td></td>\n",
|
||
" <td></td>\n",
|
||
" <td></td>\n",
|
||
" <td>2019-11-workshop</td>\n",
|
||
" <td></td>\n",
|
||
" <td></td>\n",
|
||
" <td>TA01 Strategic Planning</td>\n",
|
||
" <td>ALL</td>\n",
|
||
" <td></td>\n",
|
||
" <td></td>\n",
|
||
" <td>C00004 - Managing like a chronic disease</td>\n",
|
||
" <td>TA01</td>\n",
|
||
" <td>Strategic Planning</td>\n",
|
||
" <td>M007</td>\n",
|
||
" <td>- metatechnique</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>70</th>\n",
|
||
" <td>C00005</td>\n",
|
||
" <td>Policy: makers, terminology, elements: a) broa...</td>\n",
|
||
" <td>M007 - metatechnique</td>\n",
|
||
" <td></td>\n",
|
||
" <td></td>\n",
|
||
" <td></td>\n",
|
||
" <td></td>\n",
|
||
" <td>2019-11-workshop</td>\n",
|
||
" <td></td>\n",
|
||
" <td></td>\n",
|
||
" <td>TA01 Strategic Planning</td>\n",
|
||
" <td>ALL</td>\n",
|
||
" <td></td>\n",
|
||
" <td></td>\n",
|
||
" <td>C00005 - Policy: makers, terminology, elements...</td>\n",
|
||
" <td>TA01</td>\n",
|
||
" <td>Strategic Planning</td>\n",
|
||
" <td>M007</td>\n",
|
||
" <td>- metatechnique</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>71</th>\n",
|
||
" <td>C00006</td>\n",
|
||
" <td>Charge for social media</td>\n",
|
||
" <td>M004 - friction</td>\n",
|
||
" <td>No corresponding AMITT technique.</td>\n",
|
||
" <td></td>\n",
|
||
" <td>A033 - social media platform owner</td>\n",
|
||
" <td></td>\n",
|
||
" <td>2019-11-workshop</td>\n",
|
||
" <td></td>\n",
|
||
" <td></td>\n",
|
||
" <td>TA01 Strategic Planning</td>\n",
|
||
" <td>D2 Deny</td>\n",
|
||
" <td></td>\n",
|
||
" <td></td>\n",
|
||
" <td>C00006 - Charge for social media</td>\n",
|
||
" <td>TA01</td>\n",
|
||
" <td>Strategic Planning</td>\n",
|
||
" <td>M004</td>\n",
|
||
" <td>- friction</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",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\n",
|
||
" <td>...</td>\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>25</th>\n",
|
||
" <td>C00215</td>\n",
|
||
" <td>Use fraud legislation to clean up social media</td>\n",
|
||
" <td>M007 - metatechnique</td>\n",
|
||
" <td></td>\n",
|
||
" <td></td>\n",
|
||
" <td>A020 - policy maker</td>\n",
|
||
" <td></td>\n",
|
||
" <td>2019-11-workshop</td>\n",
|
||
" <td></td>\n",
|
||
" <td></td>\n",
|
||
" <td>TA07 Channel Selection</td>\n",
|
||
" <td>D3 Disrupt</td>\n",
|
||
" <td></td>\n",
|
||
" <td></td>\n",
|
||
" <td>C00215 - Use fraud legislation to clean up soc...</td>\n",
|
||
" <td>TA07</td>\n",
|
||
" <td>Channel Selection</td>\n",
|
||
" <td>M007</td>\n",
|
||
" <td>- metatechnique</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>50</th>\n",
|
||
" <td>C00216</td>\n",
|
||
" <td>Use advertiser controls to stem flow of funds ...</td>\n",
|
||
" <td>M014 - reduce resources</td>\n",
|
||
" <td></td>\n",
|
||
" <td></td>\n",
|
||
" <td>A023 - adtech provider</td>\n",
|
||
" <td></td>\n",
|
||
" <td>2019-11-workshop</td>\n",
|
||
" <td></td>\n",
|
||
" <td></td>\n",
|
||
" <td>TA05 Microtargeting</td>\n",
|
||
" <td>D2 Deny</td>\n",
|
||
" <td></td>\n",
|
||
" <td></td>\n",
|
||
" <td>C00216 - Use advertiser controls to stem flow ...</td>\n",
|
||
" <td>TA05</td>\n",
|
||
" <td>Microtargeting</td>\n",
|
||
" <td>M014</td>\n",
|
||
" <td>- reduce resources</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>45</th>\n",
|
||
" <td>C00217</td>\n",
|
||
" <td>Registries alert when large batches of newsy U...</td>\n",
|
||
" <td>M003 - daylight</td>\n",
|
||
" <td></td>\n",
|
||
" <td></td>\n",
|
||
" <td>A028 - platform administrator</td>\n",
|
||
" <td></td>\n",
|
||
" <td>grugq</td>\n",
|
||
" <td></td>\n",
|
||
" <td></td>\n",
|
||
" <td>TA07 Channel Selection</td>\n",
|
||
" <td>D2 Deny</td>\n",
|
||
" <td></td>\n",
|
||
" <td></td>\n",
|
||
" <td>C00217 - Registries alert when large batches o...</td>\n",
|
||
" <td>TA07</td>\n",
|
||
" <td>Channel Selection</td>\n",
|
||
" <td>M003</td>\n",
|
||
" <td>- daylight</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>46</th>\n",
|
||
" <td>C00218</td>\n",
|
||
" <td>Censorship</td>\n",
|
||
" <td>M005 - removal</td>\n",
|
||
" <td>Alter and/or block the publication/disseminati...</td>\n",
|
||
" <td></td>\n",
|
||
" <td>A031 - social media platform administrator</td>\n",
|
||
" <td></td>\n",
|
||
" <td>grugq</td>\n",
|
||
" <td>Taylor81</td>\n",
|
||
" <td></td>\n",
|
||
" <td>TA09 Exposure</td>\n",
|
||
" <td>D2 Deny</td>\n",
|
||
" <td></td>\n",
|
||
" <td></td>\n",
|
||
" <td>C00218 - Censorship</td>\n",
|
||
" <td>TA09</td>\n",
|
||
" <td>Exposure</td>\n",
|
||
" <td>M005</td>\n",
|
||
" <td>- removal</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>185</th>\n",
|
||
" <td>C00219</td>\n",
|
||
" <td>Add metadata to content - out of the control o...</td>\n",
|
||
" <td>M003 - daylight</td>\n",
|
||
" <td></td>\n",
|
||
" <td>Add date and source to images</td>\n",
|
||
" <td></td>\n",
|
||
" <td></td>\n",
|
||
" <td>grugq</td>\n",
|
||
" <td></td>\n",
|
||
" <td></td>\n",
|
||
" <td>TA06 Develop Content</td>\n",
|
||
" <td>D3 Disrupt</td>\n",
|
||
" <td></td>\n",
|
||
" <td></td>\n",
|
||
" <td>C00219 - Add metadata to content - out of the ...</td>\n",
|
||
" <td>TA06</td>\n",
|
||
" <td>Develop Content</td>\n",
|
||
" <td>M003</td>\n",
|
||
" <td>- daylight</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"<p>186 rows × 19 columns</p>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" id name \\\n",
|
||
"67 C00001 Better models of info spread up the layers \n",
|
||
"68 C00003 How can we safeguard against extremists using ... \n",
|
||
"69 C00004 Managing like a chronic disease \n",
|
||
"70 C00005 Policy: makers, terminology, elements: a) broa... \n",
|
||
"71 C00006 Charge for social media \n",
|
||
".. ... ... \n",
|
||
"25 C00215 Use fraud legislation to clean up social media \n",
|
||
"50 C00216 Use advertiser controls to stem flow of funds ... \n",
|
||
"45 C00217 Registries alert when large batches of newsy U... \n",
|
||
"46 C00218 Censorship \n",
|
||
"185 C00219 Add metadata to content - out of the control o... \n",
|
||
"\n",
|
||
" metatechnique \\\n",
|
||
"67 M007 - metatechnique \n",
|
||
"68 M007 - metatechnique \n",
|
||
"69 M007 - metatechnique \n",
|
||
"70 M007 - metatechnique \n",
|
||
"71 M004 - friction \n",
|
||
".. ... \n",
|
||
"25 M007 - metatechnique \n",
|
||
"50 M014 - reduce resources \n",
|
||
"45 M003 - daylight \n",
|
||
"46 M005 - removal \n",
|
||
"185 M003 - daylight \n",
|
||
"\n",
|
||
" summary \\\n",
|
||
"67 \n",
|
||
"68 \n",
|
||
"69 \n",
|
||
"70 \n",
|
||
"71 No corresponding AMITT technique. \n",
|
||
".. ... \n",
|
||
"25 \n",
|
||
"50 \n",
|
||
"45 \n",
|
||
"46 Alter and/or block the publication/disseminati... \n",
|
||
"185 \n",
|
||
"\n",
|
||
" playbooks \\\n",
|
||
"67 \n",
|
||
"68 \n",
|
||
"69 \n",
|
||
"70 \n",
|
||
"71 \n",
|
||
".. ... \n",
|
||
"25 \n",
|
||
"50 \n",
|
||
"45 \n",
|
||
"46 \n",
|
||
"185 Add date and source to images \n",
|
||
"\n",
|
||
" actors resources_needed \\\n",
|
||
"67 \n",
|
||
"68 \n",
|
||
"69 \n",
|
||
"70 \n",
|
||
"71 A033 - social media platform owner \n",
|
||
".. ... ... \n",
|
||
"25 A020 - policy maker \n",
|
||
"50 A023 - adtech provider \n",
|
||
"45 A028 - platform administrator \n",
|
||
"46 A031 - social media platform administrator \n",
|
||
"185 \n",
|
||
"\n",
|
||
" how_found references incident_ids tactic \\\n",
|
||
"67 2019-11-workshop TA01 Strategic Planning \n",
|
||
"68 2019-11-workshop TA01 Strategic Planning \n",
|
||
"69 2019-11-workshop TA01 Strategic Planning \n",
|
||
"70 2019-11-workshop TA01 Strategic Planning \n",
|
||
"71 2019-11-workshop TA01 Strategic Planning \n",
|
||
".. ... ... ... ... \n",
|
||
"25 2019-11-workshop TA07 Channel Selection \n",
|
||
"50 2019-11-workshop TA05 Microtargeting \n",
|
||
"45 grugq TA07 Channel Selection \n",
|
||
"46 grugq Taylor81 TA09 Exposure \n",
|
||
"185 grugq TA06 Develop Content \n",
|
||
"\n",
|
||
" responsetype notes techniques \\\n",
|
||
"67 ALL \n",
|
||
"68 ALL \n",
|
||
"69 ALL \n",
|
||
"70 ALL \n",
|
||
"71 D2 Deny \n",
|
||
".. ... ... ... \n",
|
||
"25 D3 Disrupt \n",
|
||
"50 D2 Deny \n",
|
||
"45 D2 Deny \n",
|
||
"46 D2 Deny \n",
|
||
"185 D3 Disrupt \n",
|
||
"\n",
|
||
" longname tactic_id \\\n",
|
||
"67 C00001 - Better models of info spread up the l... TA01 \n",
|
||
"68 C00003 - How can we safeguard against extremis... TA01 \n",
|
||
"69 C00004 - Managing like a chronic disease TA01 \n",
|
||
"70 C00005 - Policy: makers, terminology, elements... TA01 \n",
|
||
"71 C00006 - Charge for social media TA01 \n",
|
||
".. ... ... \n",
|
||
"25 C00215 - Use fraud legislation to clean up soc... TA07 \n",
|
||
"50 C00216 - Use advertiser controls to stem flow ... TA05 \n",
|
||
"45 C00217 - Registries alert when large batches o... TA07 \n",
|
||
"46 C00218 - Censorship TA09 \n",
|
||
"185 C00219 - Add metadata to content - out of the ... TA06 \n",
|
||
"\n",
|
||
" tactic_name metatechnique_id metatechnique_name \n",
|
||
"67 Strategic Planning M007 - metatechnique \n",
|
||
"68 Strategic Planning M007 - metatechnique \n",
|
||
"69 Strategic Planning M007 - metatechnique \n",
|
||
"70 Strategic Planning M007 - metatechnique \n",
|
||
"71 Strategic Planning M004 - friction \n",
|
||
".. ... ... ... \n",
|
||
"25 Channel Selection M007 - metatechnique \n",
|
||
"50 Microtargeting M014 - reduce resources \n",
|
||
"45 Channel Selection M003 - daylight \n",
|
||
"46 Exposure M005 - removal \n",
|
||
"185 Develop Content M003 - daylight \n",
|
||
"\n",
|
||
"[186 rows x 19 columns]"
|
||
]
|
||
},
|
||
"execution_count": 10,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"amitt.df_counters"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 3,
|
||
"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 tr th {\n",
|
||
" text-align: left;\n",
|
||
" }\n",
|
||
"\n",
|
||
" .dataframe thead tr:last-of-type th {\n",
|
||
" text-align: right;\n",
|
||
" }\n",
|
||
"</style>\n",
|
||
"<table border=\"1\" class=\"dataframe\">\n",
|
||
" <thead>\n",
|
||
" <tr>\n",
|
||
" <th></th>\n",
|
||
" <th colspan=\"7\" halign=\"left\">id</th>\n",
|
||
" <th>TOTALS</th>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>responsetype</th>\n",
|
||
" <th>ALL</th>\n",
|
||
" <th>D2 Deny</th>\n",
|
||
" <th>D3 Disrupt</th>\n",
|
||
" <th>D4 Degrade</th>\n",
|
||
" <th>D5 Deceive</th>\n",
|
||
" <th>D6 Destroy</th>\n",
|
||
" <th>D7 Deter</th>\n",
|
||
" <th></th>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>resource_id</th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" <th></th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" <tr>\n",
|
||
" <th></th>\n",
|
||
" <td>4</td>\n",
|
||
" <td>62</td>\n",
|
||
" <td>61</td>\n",
|
||
" <td>27</td>\n",
|
||
" <td>4</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>14</td>\n",
|
||
" <td>174</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>R001</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>1</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>R002</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>1</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>1</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>R003</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>2</td>\n",
|
||
" </tr>\n",
|
||
" <tr>\n",
|
||
" <th>R004</th>\n",
|
||
" <td>0</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>2</td>\n",
|
||
" <td>4</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>0</td>\n",
|
||
" <td>8</td>\n",
|
||
" </tr>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
" id \\\n",
|
||
"responsetype ALL D2 Deny D3 Disrupt D4 Degrade D5 Deceive D6 Destroy D7 Deter \n",
|
||
"resource_id \n",
|
||
" 4 62 61 27 4 2 14 \n",
|
||
"R001 0 1 0 0 0 0 0 \n",
|
||
"R002 0 1 0 0 0 0 0 \n",
|
||
"R003 0 0 2 0 0 0 0 \n",
|
||
"R004 0 2 2 4 0 0 0 \n",
|
||
"\n",
|
||
" TOTALS \n",
|
||
"responsetype \n",
|
||
"resource_id \n",
|
||
" 174 \n",
|
||
"R001 1 \n",
|
||
"R002 1 \n",
|
||
"R003 2 \n",
|
||
"R004 8 "
|
||
]
|
||
},
|
||
"execution_count": 3,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"counts_table = pd.pivot_table(amitt.cross_counterid_resourceid.merge(amitt.df_counters[['id', 'responsetype']]), \n",
|
||
" index='resource_id', columns='responsetype', aggfunc=len, \n",
|
||
" fill_value=0)\n",
|
||
"counts_table['TOTALS'] = counts_table.sum(axis=1)\n",
|
||
"\n",
|
||
"counts_table"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 4,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"ename": "KeyError",
|
||
"evalue": "''",
|
||
"output_type": "error",
|
||
"traceback": [
|
||
"\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
|
||
"\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)",
|
||
"\u001b[0;32m<ipython-input-4-ea91eea54f15>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mamitt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mwrite_counts_table_to_file\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'resource'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mamitt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mresources\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcounts_table\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'testfile.txt'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
|
||
"\u001b[0;32m~/Dropbox/SJT_Projects_current/CogSecCollab/CODE_AND_DATA/github_cogseccollab_AMITT/HTML_GENERATING_CODE/generate_amitt_ttps.py\u001b[0m in \u001b[0;36mwrite_counts_table_to_file\u001b[0;34m(self, objectname, objectdict, counts_table, outfile)\u001b[0m\n\u001b[1;32m 712\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mindex\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcounts\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mcounts_table\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0miterrows\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 713\u001b[0m html += '<td><a href=\"../{0}s/{1}.md\">{1} {2}</a></td>\\n'.format(\n\u001b[0;32m--> 714\u001b[0;31m objectname, index, objectdict[index])\n\u001b[0m\u001b[1;32m 715\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mval\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mcounts\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalues\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 716\u001b[0m \u001b[0mhtml\u001b[0m \u001b[0;34m+=\u001b[0m \u001b[0;34m'<td>{}</td>\\n'\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mformat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mval\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
|
||
"\u001b[0;31mKeyError\u001b[0m: ''"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"amitt.write_counts_table_to_file('resource', amitt.resources, counts_table, 'testfile.txt')"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 5,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
"{'R001': 'datastreams ',\n",
|
||
" 'R002': 'funding ',\n",
|
||
" 'R003': 'money ',\n",
|
||
" 'R004': 'platform algorithms ',\n",
|
||
" 'R005': 'slang translation',\n",
|
||
" 'R006': 'disinformation datasets'}"
|
||
]
|
||
},
|
||
"execution_count": 5,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"amitt.resources"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 6,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"name": "stdout",
|
||
"output_type": "stream",
|
||
"text": [
|
||
" is responsetype\n",
|
||
"id ALL 4\n",
|
||
" D2 Deny 62\n",
|
||
" D3 Disrupt 61\n",
|
||
" D4 Degrade 27\n",
|
||
" D5 Deceive 4\n",
|
||
" D6 Destroy 2\n",
|
||
" D7 Deter 14\n",
|
||
"TOTALS 174\n",
|
||
"Name: , dtype: int64\n",
|
||
"R001 is responsetype\n",
|
||
"id ALL 0\n",
|
||
" D2 Deny 1\n",
|
||
" D3 Disrupt 0\n",
|
||
" D4 Degrade 0\n",
|
||
" D5 Deceive 0\n",
|
||
" D6 Destroy 0\n",
|
||
" D7 Deter 0\n",
|
||
"TOTALS 1\n",
|
||
"Name: R001, dtype: int64\n",
|
||
"R002 is responsetype\n",
|
||
"id ALL 0\n",
|
||
" D2 Deny 1\n",
|
||
" D3 Disrupt 0\n",
|
||
" D4 Degrade 0\n",
|
||
" D5 Deceive 0\n",
|
||
" D6 Destroy 0\n",
|
||
" D7 Deter 0\n",
|
||
"TOTALS 1\n",
|
||
"Name: R002, dtype: int64\n",
|
||
"R003 is responsetype\n",
|
||
"id ALL 0\n",
|
||
" D2 Deny 0\n",
|
||
" D3 Disrupt 2\n",
|
||
" D4 Degrade 0\n",
|
||
" D5 Deceive 0\n",
|
||
" D6 Destroy 0\n",
|
||
" D7 Deter 0\n",
|
||
"TOTALS 2\n",
|
||
"Name: R003, dtype: int64\n",
|
||
"R004 is responsetype\n",
|
||
"id ALL 0\n",
|
||
" D2 Deny 2\n",
|
||
" D3 Disrupt 2\n",
|
||
" D4 Degrade 4\n",
|
||
" D5 Deceive 0\n",
|
||
" D6 Destroy 0\n",
|
||
" D7 Deter 0\n",
|
||
"TOTALS 8\n",
|
||
"Name: R004, dtype: int64\n"
|
||
]
|
||
}
|
||
],
|
||
"source": [
|
||
"for index, counts in counts_table.iterrows():\n",
|
||
" print('{} is {}'.format(index, counts))"
|
||
]
|
||
},
|
||
{
|
||
"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>resource_id</th>\n",
|
||
" <th>responsetype</th>\n",
|
||
" </tr>\n",
|
||
" </thead>\n",
|
||
" <tbody>\n",
|
||
" </tbody>\n",
|
||
"</table>\n",
|
||
"</div>"
|
||
],
|
||
"text/plain": [
|
||
"Empty DataFrame\n",
|
||
"Columns: [id, resource_id, responsetype]\n",
|
||
"Index: []"
|
||
]
|
||
},
|
||
"execution_count": 18,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"xx = amitt.cross_counterid_resourceid.merge(amitt.df_counters[['id', 'responsetype']], how='inner')\n",
|
||
"xx[xx['responsetype'].isin(amitt.resources.keys())]"
|
||
]
|
||
},
|
||
{
|
||
"cell_type": "code",
|
||
"execution_count": 13,
|
||
"metadata": {},
|
||
"outputs": [
|
||
{
|
||
"data": {
|
||
"text/plain": [
|
||
" 174\n",
|
||
"R004 8\n",
|
||
"R003 2\n",
|
||
"R002 1\n",
|
||
"R001 1\n",
|
||
"Name: resource_id, dtype: int64"
|
||
]
|
||
},
|
||
"execution_count": 13,
|
||
"metadata": {},
|
||
"output_type": "execute_result"
|
||
}
|
||
],
|
||
"source": [
|
||
"xx['resource_id'].value_counts()"
|
||
]
|
||
},
|
||
{
|
||
"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
|
||
}
|