|
{ |
|
"cells": [ |
|
{ |
|
"cell_type": "code", |
|
"execution_count": null, |
|
"id": "fc49e3d9-bf07-4555-bdc8-6edc5e586cf3", |
|
"metadata": {}, |
|
"outputs": [], |
|
"source": [ |
|
"import json\n", |
|
"import random\n", |
|
"\n", |
|
"import pylab as plt\n", |
|
"\n", |
|
"from attrdict import AttrDict\n", |
|
"from glob import glob\n", |
|
"from IPython.display import JSON\n", |
|
"from pathlib import Path" |
|
] |
|
}, |
|
{ |
|
"cell_type": "code", |
|
"execution_count": null, |
|
"id": "6efea9ed-1b65-4a5a-b018-ed9096f6bb20", |
|
"metadata": {}, |
|
"outputs": [], |
|
"source": [ |
|
"base_dir_info = 'cards/info'" |
|
] |
|
}, |
|
{ |
|
"cell_type": "code", |
|
"execution_count": null, |
|
"id": "90c46118-03bc-424a-90c3-5e1b688dadae", |
|
"metadata": {}, |
|
"outputs": [], |
|
"source": [ |
|
"card_types_main = [\n", |
|
" 'Artifact',\n", |
|
" 'Creature',\n", |
|
" 'Enchantment',\n", |
|
" 'Instant',\n", |
|
" 'Land',\n", |
|
" 'Planeswalker',\n", |
|
" 'Sorcery',\n", |
|
"]\n", |
|
"card_types_sub = [\n", |
|
"]" |
|
] |
|
}, |
|
{ |
|
"cell_type": "code", |
|
"execution_count": null, |
|
"id": "c964de95-8aef-4385-b3fa-f710e35138b9", |
|
"metadata": {}, |
|
"outputs": [], |
|
"source": [ |
|
"def load_card_infos(base_dir):\n", |
|
" cards = glob(f\"{base_dir}/*.json\")\n", |
|
" card_infos = {}\n", |
|
" for c in cards:\n", |
|
" cid = Path(c).stem\n", |
|
" with open(c) as fn:\n", |
|
" card_info = AttrDict(json.load(fn))\n", |
|
" card_infos[cid] = card_info\n", |
|
" return card_infos\n", |
|
"\n", |
|
"card_infos = load_card_infos(base_dir_info)\n", |
|
"print(f\"Loaded data of a total of {len(card_infos)} cards.\")\n", |
|
"print()\n", |
|
"print(\"random card info as an example:\")\n", |
|
"JSON(card_infos[random.sample(list(card_infos.keys()), 1)[0]], expanded=True)" |
|
] |
|
}, |
|
{ |
|
"cell_type": "code", |
|
"execution_count": null, |
|
"id": "ece297f5-5c38-4ce1-bcba-53b8eda9e7df", |
|
"metadata": {}, |
|
"outputs": [], |
|
"source": [ |
|
"count_types_main = {\n", |
|
" k: sum([1\n", |
|
" for v in card_infos.values()\n", |
|
" if k in v.type\n", |
|
" ])\n", |
|
" for k in card_types_main\n", |
|
"}\n", |
|
"# JSON(count_types_main)" |
|
] |
|
}, |
|
{ |
|
"cell_type": "code", |
|
"execution_count": null, |
|
"id": "ca01d1bf-6848-41df-96c2-217b11a8284c", |
|
"metadata": {}, |
|
"outputs": [], |
|
"source": [ |
|
"plt.bar(range(len(count_types_main)), list(count_types_main.values()), align='center')\n", |
|
"plt.xticks(range(len(count_types_main)), list(count_types_main.keys()))\n", |
|
"plt.show()" |
|
] |
|
}, |
|
{ |
|
"cell_type": "code", |
|
"execution_count": null, |
|
"id": "8414f96a-222c-4cd4-ad52-21e64c1c28ee", |
|
"metadata": {}, |
|
"outputs": [], |
|
"source": [ |
|
"count_mana_costs = {}\n", |
|
"for c in card_infos.values():\n", |
|
" mana_short = c.mana_cost.replace('[', '').replace(']', '')\n", |
|
" if not mana_short in count_mana_costs.keys():\n", |
|
" count_mana_costs[mana_short] = 1\n", |
|
" else:\n", |
|
" count_mana_costs[mana_short] += 1\n", |
|
"# JSON(count_mana_costs)" |
|
] |
|
}, |
|
{ |
|
"cell_type": "code", |
|
"execution_count": null, |
|
"id": "fd1c7ab5-8ff4-41c3-8314-c982de30a211", |
|
"metadata": {}, |
|
"outputs": [], |
|
"source": [ |
|
"plt.bar(range(len(count_mana_costs)), list(count_mana_costs.values()), align='center')\n", |
|
"plt.xticks(range(len(count_mana_costs)), list(count_mana_costs.keys()))\n", |
|
"plt.show()" |
|
] |
|
}, |
|
{ |
|
"cell_type": "code", |
|
"execution_count": null, |
|
"id": "2426ebb8-5cd3-4028-9461-9b5fd550ab93", |
|
"metadata": {}, |
|
"outputs": [], |
|
"source": [ |
|
"# evergreens = [\n", |
|
"# \"Activate\",\n", |
|
"# \"Attach\n", |
|
"# \"Cast\",\n", |
|
"# \"Counter\n", |
|
"# \"Create\",\n", |
|
"# \"Destroy\",\n", |
|
"# \"Discard\",\n", |
|
"# \"Exchange\",\n", |
|
"# \"Exile\",\n", |
|
"# \"Fight\",\n", |
|
"# \"Mill\",\n", |
|
"# \"Play\n", |
|
"# \"Reveal\",\n", |
|
"# \"Sacrifice\n", |
|
"# \"Scry\",\n", |
|
"# \"Search\n", |
|
"# \"Shuffle\",\n", |
|
"# \"Tap/Untap\",\n", |
|
"# ]" |
|
] |
|
}, |
|
{ |
|
"cell_type": "code", |
|
"execution_count": null, |
|
"id": "7e472316-552b-400a-85ac-e76b0e33e1c2", |
|
"metadata": {}, |
|
"outputs": [], |
|
"source": [ |
|
"evergreen_abilities = [\n", |
|
" \"Deathtouch\",\n", |
|
" \"Defender\",\n", |
|
" \"Double strike\",\n", |
|
" \"Enchant\",\n", |
|
" \"Equip\",\n", |
|
" \"First strike\",\n", |
|
" \"Flash\",\n", |
|
" \"Flying\",\n", |
|
" \"Haste\",\n", |
|
" \"Hexproof\",\n", |
|
" \"Indestructible\",\n", |
|
" \"Lifelink\",\n", |
|
" \"Menace\",\n", |
|
" \"Protection\",\n", |
|
" \"Reach\",\n", |
|
" \"Trample\",\n", |
|
" \"Vigilance\",\n", |
|
" \"Ward\",\n", |
|
"]" |
|
] |
|
}, |
|
{ |
|
"cell_type": "code", |
|
"execution_count": null, |
|
"id": "5f90a3ff-0968-4546-b5d4-fd25af3fc603", |
|
"metadata": {}, |
|
"outputs": [], |
|
"source": [ |
|
"\n", |
|
"for c in card_infos.values():\n", |
|
" for d in c['description']:\n", |
|
" print(d)\n", |
|
" break\n", |
|
" mana_short = c.mana_cost.replace('[', '').replace(']', '')\n", |
|
" if not mana_short in count_mana_costs.keys():\n", |
|
" count_mana_costs[mana_short] = 1\n", |
|
" else:\n", |
|
" count_mana_costs[mana_short] += 1" |
|
] |
|
}, |
|
{ |
|
"cell_type": "code", |
|
"execution_count": null, |
|
"id": "6bf6b14d-46a9-44cb-a9f1-1f3202a24832", |
|
"metadata": {}, |
|
"outputs": [], |
|
"source": [ |
|
"count_evergreen_abilities = {k: 0 for k in evergreen_abilities}\n", |
|
"for c in card_infos.values():\n", |
|
" for d in c.description:\n", |
|
" for a in evergreen_abilities:\n", |
|
" if a in d:\n", |
|
" count_evergreen_abilities[a] += 1\n", |
|
"# JSON(count_evergreen_abilities)" |
|
] |
|
}, |
|
{ |
|
"cell_type": "code", |
|
"execution_count": null, |
|
"id": "34a79aef-85ba-4c4a-a4e6-43bf1e0bfee0", |
|
"metadata": {}, |
|
"outputs": [], |
|
"source": [ |
|
"plt.bar(range(len(count_evergreen_abilities)), list(count_evergreen_abilities.values()), align='center')\n", |
|
"plt.xticks(range(len(count_evergreen_abilities)), list(count_evergreen_abilities.keys()))\n", |
|
"plt.show()" |
|
] |
|
}, |
|
{ |
|
"cell_type": "code", |
|
"execution_count": null, |
|
"id": "e005f373-d25b-43bd-b557-b6210bfb9011", |
|
"metadata": {}, |
|
"outputs": [], |
|
"source": [] |
|
}, |
|
{ |
|
"cell_type": "code", |
|
"execution_count": null, |
|
"id": "df6d8ce0-1ad2-4b49-9b22-c4d5826593ed", |
|
"metadata": {}, |
|
"outputs": [], |
|
"source": [] |
|
}, |
|
{ |
|
"cell_type": "code", |
|
"execution_count": null, |
|
"id": "eff3eaa3-adfd-47e0-a024-3104d42bc6fe", |
|
"metadata": {}, |
|
"outputs": [], |
|
"source": [] |
|
}, |
|
{ |
|
"cell_type": "code", |
|
"execution_count": null, |
|
"id": "39fac646-cdcb-4ed8-9bbf-cfc8c07734a2", |
|
"metadata": {}, |
|
"outputs": [], |
|
"source": [] |
|
}, |
|
{ |
|
"cell_type": "code", |
|
"execution_count": null, |
|
"id": "bf32ba1a-3eb6-46bb-adae-620f14988ff2", |
|
"metadata": {}, |
|
"outputs": [], |
|
"source": [] |
|
}, |
|
{ |
|
"cell_type": "code", |
|
"execution_count": null, |
|
"id": "29d4f9f4-f22e-4e93-b6cb-fdb400dd7ee7", |
|
"metadata": {}, |
|
"outputs": [], |
|
"source": [] |
|
}, |
|
{ |
|
"cell_type": "code", |
|
"execution_count": null, |
|
"id": "9ad35fde-bb1c-4463-8e7c-1f877ef8e7f3", |
|
"metadata": {}, |
|
"outputs": [], |
|
"source": [] |
|
}, |
|
{ |
|
"cell_type": "code", |
|
"execution_count": null, |
|
"id": "232decc6-2b95-4bf8-a48e-e086b1972073", |
|
"metadata": {}, |
|
"outputs": [], |
|
"source": [] |
|
} |
|
], |
|
"metadata": { |
|
"kernelspec": { |
|
"display_name": "Python 3 (ipykernel)", |
|
"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.9.6" |
|
} |
|
}, |
|
"nbformat": 4, |
|
"nbformat_minor": 5 |
|
} |