Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- import json, sys, matplotlib.pyplot as plt, statistics
- def count_words(card, no_remainder=False):
- if "card_faces" in card:
- oracle_text = " ".join([face["oracle_text"] for face in card["card_faces"]])
- else:
- oracle_text = card.get("oracle_text", "")
- if no_remainder:
- oracle_text = oracle_text
- length = len(oracle_text.split())
- length = min(100, 5 * (length // 5))
- return length
- # path to default cards JSON from Scryfall
- with open(sys.argv[1]) as f:
- default_cards = json.load(f)
- names_to_lengths = dict()
- sets_to_releasedates = dict()
- sets_to_names = dict()
- for card in default_cards:
- if card["set_type"] not in ["expansion", "core"]:
- continue
- if card["layout"] in ["token"]:
- continue
- if card["set_name"] not in sets_to_releasedates:
- sets_to_releasedates[card["set_name"]] = "9999-99-99"
- sets_to_names[card["set_name"]] = set()
- sets_to_releasedates[card["set_name"]] = min(
- sets_to_releasedates[card["set_name"]], card["released_at"]
- )
- sets_to_names[card["set_name"]].add(card["name"])
- if card["name"] in names_to_lengths:
- continue
- names_to_lengths[card["name"]] = count_words(card)
- for k, v in sorted(sets_to_releasedates.items(), key=lambda item: item[1]):
- card_lengths = sorted([names_to_lengths[name] for name in sets_to_names[k]])
- xs = [f"{5 * x}-{5*x+4}" for x in range(19)] + ["95+"]
- ys = [len([n for n in card_lengths if 5 * x <= n <= 5 * x + 4]) for x in range(20)]
- nice_k = "".join(
- [
- x.title()
- for x in (
- "".join(
- [
- l
- for l in k
- if l
- in "0123456789aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ "
- ]
- )
- ).split()
- ]
- )
- fig = plt.figure(figsize=(10, 5))
- plt.bar(xs, ys, color="black", width=0.4)
- plt.xticks(rotation="vertical")
- plt.ylim(0, 100)
- plt.title("\n".join([k, v]))
- plt.savefig(f"{v}_{nice_k}.png")
- plt.close(fig)
- print(v, k, statistics.mean(card_lengths), statistics.stdev(card_lengths), sep="\t")
- # convert -delay 30 -loop 0 *.png animation.gif
Advertisement
Add Comment
Please, Sign In to add comment