Spaces:
Running
Running
File size: 7,576 Bytes
952f04c 29b06fb 952f04c |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 |
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# middleschool-cardlist\n",
"\n",
"## Prepare the data\n",
"\n",
"Download raw data from [MTGJSON](https://mtgjson.com/) (uncomment and run only once)\n"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"# !cd data\n",
"# !wget \"https://mtgjson.com/api/v5/AllPrintings.json.bz2\"\n",
"# !bunzip2 AllPrintings.json.bz2\n",
"# !cd -\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The Raw data is very large, so let's make JSON files for all relevant sets\n",
"\n",
"Note: this cell can take a couple minutes to run\n"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"setlist = ['4ED', 'ICE', 'CHR', 'HML', 'ALL', 'MIR', 'VIS', '5ED',\n",
" 'WTH', 'POR', 'TMP', 'STH', 'EXO', 'P02', 'USG', 'ULG',\n",
" '6ED', 'UDS', 'PTK', 'S99', 'MMQ', 'NEM', 'PCY', 'S00',\n",
" 'INV', 'PLS', '7ED', 'APC', 'ODY', 'TOR', 'JUD', 'ONS',\n",
" 'LGN', 'SCG', 'PDRC', 'PHPR']\n",
"for set in setlist:\n",
" command = 'cat data/AllPrintings.json | jq \\'.data.\\\"' + \\\n",
" set + '\\\".cards\\' > data/set_' + set + '.json'\n",
" !{command}\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Concatenate all set files into `middleschool.json`\n"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"command = \"jq -s add data/set_* > data/middleschool.json\"\n",
"!{command}\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Create a list with each card's oracle ID, English name, and Japanese name\n"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"5793 cards found\n",
" oracle_id name name_ja\n",
"0 8adbba6e-03ef-4278-aec5-8a4496b377a8 Abandon Hope 断念\n",
"0 5a70ccfa-d12d-4e62-a1a4-f05cda2fd442 Abandoned Outpost 見捨てられた前哨地\n",
"0 c208b959-d0e4-4a9a-8255-2c7cc7596767 Abbey Gargoyles 修道院のガーゴイル\n",
"0 62e3f285-886c-414e-b4ff-403a7c01c23a Abbey Matron None\n",
"0 d0e1904e-1a37-41f6-8582-b9ea794bb886 Abduction 誘拐\n",
" oracle_id name name_ja\n",
"0 ae8773a3-05f2-4074-9a53-033b0c127235 Zuo Ci, the Mocking Sage 嘲笑する仙人 左慈\n",
"0 c6eaa147-3566-43a9-999a-d58b877496f5 Zur's Weirding ズアーの運命支配\n",
"0 ee0f883f-d7c9-4acf-a78f-f733b6f268d3 Zuran Enchanter None\n",
"0 08cb8a30-9cb4-4517-bee5-8848aa60d1a2 Zuran Orb None\n",
"0 bc7b90b1-3517-4e5d-9bd8-68b4d8a259fd Zuran Spellcaster None\n"
]
}
],
"source": [
"import json\n",
"import pandas as pd\n",
"\n",
"with open(\"data/middleschool.json\") as json_data:\n",
" cards = json.loads(json_data.read())\n",
"\n",
"column_names = ['oracle_id', 'name', 'name_ja']\n",
"middleschool_df = pd.DataFrame(columns=column_names)\n",
"for card in cards:\n",
" oracle_id = card['identifiers']['scryfallOracleId']\n",
" name = card['name']\n",
" lang_ja = [lang for lang in card['foreignData']\n",
" if lang['language'] == 'Japanese']\n",
" if (len(lang_ja) > 0):\n",
" name_ja = lang_ja[0]['name']\n",
" else:\n",
" name_ja = None\n",
" temporary_df = pd.DataFrame({\n",
" 'oracle_id': [oracle_id],\n",
" 'name': [name],\n",
" 'name_ja': [name_ja]\n",
" })\n",
" middleschool_df = pd.concat([middleschool_df, temporary_df])\n",
"\n",
"middleschool_df = middleschool_df.drop_duplicates(subset=['oracle_id'])\n",
"middleschool_df = middleschool_df.sort_values(by='name')\n",
"print(middleschool_df.shape[0], 'cards found')\n",
"print(middleschool_df.head())\n",
"print(middleschool_df.tail())\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Exclude all cards banned in Middle School\n"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Cards legal by set: 5793\n",
"Banned cards: 26\n",
"Cards legal by set and not banned: 5767\n"
]
}
],
"source": [
"banlist = [\"Amulet of Quoz\",\n",
" \"Balance\",\n",
" \"Brainstorm\",\n",
" \"Bronze Tablet\",\n",
" \"Channel\",\n",
" \"Dark Ritual\",\n",
" \"Demonic Consultation\",\n",
" \"Flash\",\n",
" \"Goblin Recruiter\",\n",
" \"Imperial Seal\",\n",
" \"Jeweled Bird\",\n",
" \"Lion's Eye Diamond\",\n",
" \"Mana Crypt\",\n",
" \"Mana Vault\",\n",
" \"Memory Jar\",\n",
" \"Mind's Desire\",\n",
" \"Mind Twist\",\n",
" \"Rebirth\",\n",
" \"Strip Mine\",\n",
" \"Tempest Efreet\",\n",
" \"Timmerian Fiends\",\n",
" \"Tolarian Academy\",\n",
" \"Vampiric Tutor\",\n",
" \"Windfall\",\n",
" \"Yawgmoth's Bargain\",\n",
" \"Yawgmoth's Will\"]\n",
"print('Cards legal by set:', middleschool_df.shape[0])\n",
"banned_df = middleschool_df[pd.DataFrame(\n",
" middleschool_df.name.tolist()).isin(banlist).any(1).values]\n",
"print('Banned cards:', banned_df.shape[0])\n",
"middleschool_df = pd.concat(\n",
" [middleschool_df, banned_df]).drop_duplicates(keep=False)\n",
"print('Cards legal by set and not banned:', middleschool_df.shape[0])\n",
"middleschool_df = middleschool_df.reset_index(drop=True)\n",
"middleschool_df = middleschool_df[['oracle_id', 'name', 'name_ja']]\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Save the list to a CSV file and a JSON file\n"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [],
"source": [
"middleschool_df.to_csv('output/middleschool.csv')\n",
"middleschool_df.to_json('output/middleschool.json')\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Feel free to delete everything in the `data` directory after you are done"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3.9.12 64-bit",
"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.12"
},
"orig_nbformat": 4,
"vscode": {
"interpreter": {
"hash": "b0fa6594d8f4cbf19f97940f81e996739fb7646882a419484c72d19e05852a7e"
}
}
},
"nbformat": 4,
"nbformat_minor": 2
}
|